17.PHP的模板引擎Smarty(下)

Smarty模板中的内置函数

变量声明

  • 使用内置函数{assign},在模板运行时为模板变量赋值,也可以为数组元素赋值,该函数有三个参数(var、value、scope)和一个选项标签(nocache),其中var和value是必须使用的属性,scope是可选属性,用来指定分配的变量范围,可以指定parent、root和global三个值,用来设定变量的有效范围

image-20201106223405140

image-20201106223450933

image-20201106223501560

流程控制

  • 在smarty模板中使用{if}函数处理分支结构,每个{if}需要有一个{/if}进行结束,也允许使用{else}和{elseif}两个从句,所有的PHP条件格式和函数在这里同样适用

image-20201106223946706

  • 在模板中使用{for}函数处理循环结构

image-20201106224128515

    <{for $foo=2 to 10}>
        <{$foo}>
    <{/for}>
  • 在smarty模板中使用{while}函数处理循环结构

image-20201106224723610

声明和调用模板函数

在声明函数时,必须使用name参数来指定函数的名字

image-20201106225130817

如果需要传递参数,则直接在模板使用中,直接传递即可,函数声明不用接收,直接可以使用变量形式访问属性参数

<{function name=printname}>
<b><{$data}></b>
<{/function}>

<{printname data="nihao"}>

数组遍历

  • 使用{foreach}函数遍历数组

image-20201106230159367

    <{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代表以下的几个属性

image-20201106231728329

  • 在smarty模板中使用{section}函数遍历数组

以下{section}中使用的属性

image-20201106231915519

不过需要注意的是,{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}来进行访问

image-20201106233428676

Smarty的模板继承特性

  • 使用{extends}函数实现模板继承

image-20201106233844152

除了使用{extends}标签继承父模板,还可以使用“extends:模板资源类型",在PHP脚本中定义整个模板继承树,这种方式提供更大的弹性,“extends:资源”用于由PHP脚本中为模板继承定义的子/父关系,

image-20201106234449851

  • 在子模板中覆盖父模板中的部分内容区域

使用{block}块函数定义一个命名为模板继承源区域,然后在子模块中也使用同样的{block}标签,声明一个子模板源区,将取代父模板中的相应区域。可以在父模板中声明一个或多个继承的源区域

image-20201106235020616

  • 合并子模板和父模板的{block}标签内容
  1. 用append添加或prepend追加{block}标签选项标记,在子模板{block}中添加append标记,可以添加内容到父模板后面,而prepend可以追加内容在父模板前面
  2. {$smarty.block.parent}或{$smarty.block.child}来占位,将父模板或子模板添加到对应位置
© 版权声明
THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发
四曲的头像-四曲博客

昵称

取消
昵称表情代码图片