smarty 是PHP的一个模板引擎,使得其内部程序逻辑与外部表现逻辑可分离开来,在MVC中负责实现view层的相关功能。
最新版的smarty可在官网下载,官网地址:http://www.smarty.net/
下载完成之后解压,把里面的libs文件夹改名为smarty,复制到本地的web目录下。
至于web目录,如果本机没有web服务器,可以下载xampp软件,在官网可找到,安装之后,htdocs文件夹下即为web根目录。
下面就可以使用smarty了,附下我做的例子,涵盖了一些smarty的用法。
注:smarty的注释格式为 {* 注释 *}
在htdocs目录下新建一个test-smarty目录,test.php文件放在其中,然后在test-smarty里再建一个template目录(存放模板)、template_c目录(存放模板编译的php)和cache目录(存放缓存)。
test.php代码:
left_delimiter="{"; //左定界符,smarty处理左右定界符之间的内容
$smarty->right_delimiter="}"; //右定界符
$smarty->template_dir="template"; //HTML模板的地址
$smarty->compile_dir="template_c"; //模板编译生成php文件的地址
$smarty->cache_dir="cache"; //缓存地址
//缓存的两个额外配置
$smarty->caching=true; //开启缓存
$smarty->cache_lifetime=120; //缓存时间
//两方法assign()和display()
$smarty->assign('title','news HI'); //对smarty模板中的变量赋值
$arr=array('title'=>'smarty-study','author'=>'xiao ming'); //一维数组
$smarty->assign('arr',$arr);
$arr2=array(
array('title1'=>'world1','title2'=>'world2'),
array('title1'=>'world3','title2'=>'world4')
); //二维数组,可测试循环
$smarty->assign('arr2',$arr2);
$smarty->assign('time',time()); //获取当前时间,赋值给time变量
$smarty->assign('blank',""); //建立一个空变量
$smarty->assign('url',"http://www.baidu.cn"); //建立一个空变量
$smarty->assign('long',"happy new year!
happy new year!"); //带换行的字符串
$smarty->assign('score',91); //测试条件判断
class myObject{
function meth1($params){
return $params[0].'已经'.$params[1];
}
} //定义一个类
$myobj=new myObject(); //实例化类的对象
$smarty->assign('myobj',$myobj);
function test($params){
// print_r($params); //输出参数
// exit; //断点,后面的不执行了
$p1=$params['p1'];
$p2=$params['p2'];
return '传入的参数1为'.$p1.',传入的参数2为'.$p2;
} //自定义的函数
$smarty->registerPlugin('function','f_test','test'); //注册test函数,注册后叫f_test
$smarty->assign('str','hello,how are you。hello,how are you。 hello,how are you。'); //测试block插件
$smarty->display('test.html'); //展现模板,后缀可以为任意字符,常用html文件
?>
“两方法”之前为配置部分,后面为具体的使用部分。
最后一句display方法则展现具体模板,这个模板test.html放在htdocs/test-smarty/template中。
test.html代码:
smarty
{$title}
{$arr.title}{$arr.author}
{$title|capitalize}
{$title|cat:' today':' happy'}
{$time|date_format}
{$blank|default:'here'}
{$url|escape:'url'}
{$title|lower}
{$title|upper}
{$long|nl2br}
{if $score gt 90}
优秀
{elseif $score gt 60}
及格
{else}
不及格
{/if}
{section name=i loop=$arr2}
{$arr2[i].title1}
{$arr2[i].title2}
{/section}
{foreach $arr2 as $one}
{$one.title1}
{$one.title2}
{foreachelse}
no content
{/foreach}
{include file="header.tpl" myname="kate"}
{$myobj->meth1(array('苹果','熟了'))}
{'Y-m-d'|date:$time}
{'H'|str_replace:'D':$title}
{f_test p1="abc" p2="def"}
{test width=150 height=200}
{$time|test:"Y-m-d H:i:s"}
{test2 replace='true' maxnum=20}
{$str}
{/test2}
代码中最后演示了smarty插件,说明一下:
smarty插件,本质上是函数。
常用类型:
function 函数插件
modifier 修饰插件(变量调节器插件)
block 区块插件
使用方法:将写好的插件放在smarty目录下的plugins中。
上面添加的三个插件文件如下。
function.test.php: