发布于 2015-01-12 11:50:09 | 225 次阅读 | 评论: 0 | 来源: PHPERZ
Smarty模板引擎
Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目的就是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。
本文为大家讲解的是smarty安装和配置,Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。感兴趣的同学参考下。
Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目的就是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。
注:这里所使用的Smarty是3.x版本,要求PHP版本为5.2或者更高。
解 压下载下来的Smarty压缩文件,将文件夹libs拷到项目中,在项目中引入libs文件夹中的"Smarty.class.php"文件后既可使用。 在Smarty内部会自动定义一个名为SMARTY_DIR的常量,该常量默认指向Smarty.class.php所在的绝对路径,可以通过自行设定该 值来改变默认值(define('SMARTY_DIR', '/lib/') 注:SMARTY_DIR常量必须以'/'结尾。)。
在正式使用smarty之前,还需要设定几个基本路径:
$smarty->template_dir = 'views/'; $smarty->compile_dir = 'lib/smarty/templates_c/'; $smarty->config_dir = 'lib/smarty/configs/'; $smarty->cache_dir = 'lib/smarty/cache/'; //或者 $smarty->setTemplateDir(''views/';'); $smarty->setCompileDir('lib/smarty/templates_c/'); $smarty->setConfigDir('lib/smarty/configs/'); $smarty->setCacheDir('lib/smarty/cache/');
为了不让我们每次使用smarty时都要重新设定这些参数,我们只需要创建一个文件,在这个文件中将这些参数设定,每次使用smarty时只包含这个文件就行了。在这里我创建了一个smarty.inc.php文件,在该文件中代码为:
<?php define("ROOT", str_replace("\\","/",dirname(__FILE__)).'/'); //将smarty.inc.php创建于项目根目录下 require ROOT."/libs/Smarty.class.php"; $smarty = new Smarty(); $smarty->setCacheDir(ROOT."/showdata/cache") //设置缓存目录 ->setConfigDir(ROOT."/showdata/configs") //设置配置目录 ->setTemplateDir(ROOT."/showdata/templates") //设置模板目录 ->setCompileDir(ROOT."/showdata/templates_c"); //设置编译目录(必选) $smarty->setCacheDir(ROOT."/showdata/smarty_cache"); //设置缓存文件夹可减轻压力 $smarty->caching = true; //开启缓存,建议调试中关闭 默认为关闭False $smarty->cache_lifetime = 60; //设置缓存时间,单位为秒 //设置开始结束边界默认为{} 但容易与javascript冲突 $smarty->left_delimiter = "<{"; $smarty->right_delimiter = "}>";
配置完成后,可通过Smarty的testInstall()内置方法查看配置信息。
Smarty配置完成以后,既可通过Smarty调用指定模版,首先在指定模板目录(/showdata/templates)下创建show.tpl模板文件内容如下:
<!DOCTYPE html> <html> <head> <meta charset="gb2312"> <title><{$title}></title> </head> <body> 你好,<{$name}> </body> </html>
注:模版文件可以是任意后缀名,为了安全 起见,尽量避免使用.html、.php等可以直接被浏览器解析的文件,当然最好的办法是禁止web浏览器直接访问模版所在文件夹。
在根目录下创建文件index.php,代码如下:
<?php include 'smarty.inc.php'; $smarty->assign("title","smarty测试"); $smarty->assign("name","记忆书签"); $smarty->display("show.tpl"); //$smarty->testInstall();
然后在浏览器中浏览数据,是否smarty安装成功,如图:
变量的传递与访问
同时Smarty也可以通过内置方法assign()向模版文件中传递各种变量,如数值、字符串、数组、对象等,
void assign(string varname, mixed var, bool nocache);
//将在后面讲到
$arr1 = new Array('zh', '26'); $arr2 = new Array('name'=>'zh', 'age'=>26); $obj = new MyObject();//MyObject为自定义类,包含name等公共属性 $smarty->assign('str', 'zh');//字符串 $smarty->assign('num', 6);//数值型 $smarty->assign('arr1', $arr1);//索引数组1 $smarty->assign('arr2', $arr2);//关联数组2 $smarty->assign('obj', $obj);//对象
模版的调用
通过Smarty的内置方法display()来打开一个模版文件
void display(string template, string cache_id, string compile_id); //将在后面讲到
$smarty->display(show.tpl);
模版中使用变量:
在模版中调用变量,通过在变量之前加上$,并使用'<{}>'边界符将变量括起来,如show.tpl内容如下:
<body> {$str} <!-- 输出zh --> {$num} <!-- 输出zh --> {$arr1[0]} <!-- 输出zh --> {$arr2.name} <!-- 输出zh --> {$obj->name} <!-- 输出zh --> </body>