index.tpl
<html><head><title>smarty测试</title></head><body>{extends file="./header.tpl"}{block name="content"}{foreach $info as $k=>$v}{$v['name']}-{$v['age']}{/foreach}{myDate()}{myInfo info="zsf"}{myBlockInfo info="zxx"}块中数据{/myBlockInfo}{$name|myModifier:"润色器"}{/block}{block name="footer" append}联系我{/block}</body></html>
header.tpl
<h1>我是通用头部</h1>{block name="content"}{/block}{block name="footer"}<h1>我是底部</h1>{/block}
在index.tpl中,我们利用smarty引擎自带的方法 extends 来引入header.tpl,如果我们某个模板在其他模板中都须要利用,可以利用这个方法,比如网站公用的顶部导航或者公用的底部。通过 block 方法和name 属性来定义一个区块,在header.tpl中我们定义了两个block,一个叫content,一个叫footer,我们在子模板index.tpl中重新定义了相同的名称的块来变动父级模板中相应块中的内容。我们可以在子模板中利用块时,添加append属性,表示子模块里的内容会在父级模板中相应块的内容进行拼接而不是完备更换。

我们在index.tpl中利用php的foreach的方法来访问并输出了info数组中的内容。可以看到这里和在php中的利用完备相同。同样功能的还有smarty供应的section方法,大家可以看下smarty手册来试一下。
{$name|myModifier:"润色器"}这里我们访问到了后台传过来的name的值,模板中访问php传过来的模板中,就和在php中利用一样,添加一个$符,这个后面的|表示润色器,表示对这个变量进行某些处理输出,smarty有很多自定义的润色器,在这里我们是利用的自定义的润色器,这个润色器是在我们上一节课中自定义的smarty.php中定义的:
// 润色器function modifierInfo($str,$params){ return $str."===".$params;}$smarty->registerPlugin("modifier","myModifier","modifierInfo");
还有我们自定义的块,
{myBlockInfo info="zxx"}块中数据{/myBlockInfo}
// 块函数function blockInfo($info,$content,$s){ return $info['info']."------------".$content;}$smarty->registerPlugin("block","myBlockInfo","blockInfo");
自定义的方法
{myInfo info="zsf"}
// 普通函数function detailInfo($info){ return "this is ".$info['info'];}$smarty->registerPlugin("function","myInfo","detailInfo");
注:
registerPlugin是一个smarty自定义的方法,可以用来自定义块,函数,润色器,利用第一个参数来进行区分,block表示定义的块,modifier表示定义的润色器,function表示定义的函数。第二个参数是我们在模板中利用自定义的块(函数或润色器)是的变量名,末了一个字符串,是我们在后台自定义的方法,表示详细的处理逻辑,返回某些数据,这些数据会在模板中进行更换!