一、安装
注:这里所使用的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之前,还需要设定几个基本路径:
- $template_dir 用于存放smarty模版文件,如果未指定该路径,Smarty会自动在当前目录中寻找模版文件。
- $compile_dir 用于存放smarty编译后的文件,如果不指定该目录,Smarty会自动在当前脚本所在目录下生成一个名为'templates_c'的目录用于存放生成的编译文件。
- $config_dir 用于存放smarty配置文件
- $cache_dir 用于存放smarty缓存文件,如果开启Smarty缓存功能,但没有指定该目录,Smarty会自动在当前脚本所在目录下生成一个名为'cache'的目录用于存放缓存文件。
$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; //设置缓存时间,单位为秒
$smarty->auto_literal = false; //只要Smarty定界符标签‘{’和‘}’内侧包含空格,那么模板将忽略定界符里面内容的解析。可以将$auto_literal变量设置为false取消上述规则
//设置开始结束边界默认为{} 但容易与javascript冲突
$smarty->left_delimiter = "<{";
$smarty->right_delimiter = "}>";
配置完成后,可通过Smarty的testInstall()内置方法查看配置信息。
二、使用smarty
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的变量传递与使用
变量的传递与访问
同时Smarty也可以通过内置方法assign()向模版文件中传递各种变量,如数值、字符串、数组、对象等, void assign(string varname, mixed var, bool nocache);
//将在后面讲到
$arr1 = Array('zh', '26');
$arr2 = 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>