Smarty模板中的内置函数
变量声明
- 使用内置函数{assign},在模板运行时为模板变量赋值,也可以为数组元素赋值,该函数有三个参数(var、value、scope)和一个选项标签(nocache),其中var和value是必须使用的属性,scope是可选属性,用来指定分配的变量范围,可以指定parent、root和global三个值,用来设定变量的有效范围
流程控制
- 在smarty模板中使用{if}函数处理分支结构,每个{if}需要有一个{/if}进行结束,也允许使用{else}和{elseif}两个从句,所有的PHP条件格式和函数在这里同样适用
- 在模板中使用{for}函数处理循环结构
<{for $foo=2 to 10}>
<{$foo}>
<{/for}>
- 在smarty模板中使用{while}函数处理循环结构
声明和调用模板函数
在声明函数时,必须使用name参数来指定函数的名字
如果需要传递参数,则直接在模板使用中,直接传递即可,函数声明不用接收,直接可以使用变量形式访问属性参数
<{function name=printname}>
<b><{$data}></b>
<{/function}>
<{printname data="nihao"}>
数组遍历
- 使用{foreach}函数遍历数组
<{assign var=foo value=[1,2,3]}>
<{foreach $foo as $item}>
<{* 输出内容 *}>
<b><{$item}></b>
<{/foreach}>
可以使用$item@key来代替键值
<{assign var=foo value=[1,2,3]}>
<{foreach $foo as $item}>
<{* 输出内容 *}>
<b><{$item@key}>:<{$item}></b>
<{/foreach}>
<{*运行结果:0:1 1:2 2:3*}>
{\<foreach>}有一些比较实用的属性,通过$var@property的访问格式,property代表以下的几个属性
- 在smarty模板中使用{section}函数遍历数组
以下{section}中使用的属性
不过需要注意的是,{section}必须是下标从0开始的顺序索引数组,{section}也可是使用{sectionelse}子标记,当loop属性指定的数组为空时,则输出{sectionelse}区域中的内容,且必须和{seciton}一起使用,另外它也不能使用结束标记
<{$user=array(1,2,3,4)}>
<{section loop=$user name="is" max=3}>
<{$user[is]}>
<{sectionelse}>
数组不存在
<{/section}>
<{*输出结果:1 2 3*}>
与{foreach}相同的是,{section}也有一些特殊属性,通过{$smarty.section.sectionname.varname}来进行访问
Smarty的模板继承特性
- 使用{extends}函数实现模板继承
除了使用{extends}标签继承父模板,还可以使用“extends:模板资源类型",在PHP脚本中定义整个模板继承树,这种方式提供更大的弹性,“extends:资源”用于由PHP脚本中为模板继承定义的子/父关系,
- 在子模板中覆盖父模板中的部分内容区域
使用{block}块函数定义一个命名为模板继承源区域,然后在子模块中也使用同样的{block}标签,声明一个子模板源区,将取代父模板中的相应区域。可以在父模板中声明一个或多个继承的源区域
- 合并子模板和父模板的{block}标签内容
- 用append添加或prepend追加{block}标签选项标记,在子模板{block}中添加append标记,可以添加内容到父模板后面,而prepend可以追加内容在父模板前面
- {$smarty.block.parent}或{$smarty.block.child}来占位,将父模板或子模板添加到对应位置
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容