PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > Smarty教程 > 正文

    smarty3从入门到精通详解(三)

    作者:admin来源:PHP自学中心浏览:时间:2020-09-30 00:07:50我要评论
    导读:4、Smarty语法基础篇4.4 内建函数4.4.1 capturecapture函数的作用是捕获模板输出的数据并将其存储到一个变量里,而不是把它们输出到页面....
    4、Smarty语法基础篇

     

    4.4 内建函数

    4.4.1 capture

    capture函数的作用是捕获模板输出的数据并将其存储到一个变量里,而不是把它们输出到页面.

    任何在 {capture name=”foo”}{/capture}之间的数据将被存储到变量$foo中。

    这样可以根据实际情况,选择性的输出一些内容,输出的语法是$smarty.capture.变量。

    {capture name=”bottom”}

    {include file=”bottom.tpl” nr=”这是底部的内容”}

    {/Capture}

    {if true }  #进行条件判断,确定是否输出

    {$smarty.capture.bottom}

    {/if}

    4.4.2 config_load

    参看3.4

    4.4.3 foreach,foreachelse

    foreach 适合于简单数组(元素类型相同)

    {foreach name=名称 item=内容 key=键 from=数组}  #2.0中的用法,3.0沿用

    正常执行

    {foreachelse}

    From变量数组没有值时(0个元素)执行。

    {/foreach}

    例子:

    {foreach name=for1 item=num from=$foo}

    {$smarty.foreach.for1.index+1}个元素:{$num}<br />

    {if is_array($num)}

    {foreach name=for2 item=num2 key=key2 from=$num}

    {$str|cat:$smarty.foreach.for2.index+1|cat:”个元素:”|cat:$num2|cat:” key是”|cat:$key2|indent:1:”.”}<br />

    {/foreach}

    {/if}

    {foreachelse}

    {$smarty.foreach.for1.index+1}个元素:没有值!<br />

    {/foreach}

     

    foreach的内置变量

    $smarty.foreach.foreachname.index   #(循环内部使用)显示当前循环的索引,如果数组为空,返回-1

    $smarty.foreach.foreachname. iteration    #(循环内部使用)显示当前的循环次数

    $smarty.foreach.foreachname.first #(循环内部使用)如果为第一次循环,返回true

    $smarty.foreach.foreachname.last #(循环内部使用)如果为最后一次循环,返回true

    $smarty.foreach.foreachname.total #(循环内外部使用)显示循环的总次数

    foreach 在3.0中做一定的升级,语法更接近于php,内置变量也更简洁。

    {foreach $myarray as $var}…{/foreach}

    foreach的内置变量,均可在内外部使用

    $var@key           #输出元素的键值,简单为012,关联为具体键值。

    $var@iteration      #显示当前的循环次数,外部使用为最后一次

    $var@index         #显示当前循环的索引,如果数组为空,返回-1,外部使用为最后一次

    $var@total          #显示循环的总次数

    $var@first           #如果为第一次循环,返回true

    $var@last           #如果为最后一次循环,返回true

     

    4.4.4 section,sectionelse

    section适用于复杂的数组操作,不适合关联数组。但是在3.0中并为对他做什么升级和修改,

    而是直接推出了for命令,for更接近于php语法。可以预见,section将在未来版本中淘汰。

    {section name=名称 loop=循环数组(次数) start=开始(0) step=步阶(1) max=最大循环次数 show=是否显示(true)}

    #2.0中的用法,3.0沿用

    正常执行

    {sectionelse}

    loop数组没有值时(0个元素)执行。

    {/section }

    例子:

    {section name=sec1 loop=$foo step=1 start=0 show=true}

    第{$smarty.section.sec1.index+1}个元素:{$foo[sec1]}  循环次数是

    {$smarty.section.sec1.iteration}<br />

    {if is_array($foo[sec1])}

    {section name=sec2 loop=$foo[sec1] step=1 start=0 show=true}

    第{$smarty.section.sec2.index+1}个元素:{$foo[sec1][sec2]}

    循环次数是{$smarty.section.sec2.iteration}<br />

    {/section}

    {/if}

    {sectionelse}

    {$smarty.section.sec1.index}个元素:没有值!<br />

    {/section}

    Section的内置变量与foreach 相同。

     

    4.4.5 include

    {include file=”包含文件” var=”自定义传入包含文件的变量”assign=” 指定一个变量保存待包含模板的输出”}

    如果规定了assign ,则包含文件不会马上输出,模板输出的数据将存储到assign指定的变量里,

    这样可以根据实际情况,再输出包含文件的内容。原理类似于capture。

     

    4.4.6 include_php

    {include_php file=”包含文件” once=”是否指包含一次(true)”assign=” 指定一个变量保存待包含的输出”}

    包含php文件,包含的文件正常编译,并提供输出。如果规定了assign ,

    则包含文件不会马上输出,输出的数据将存储到assign指定的变量里,

    这样可以根据实际情况,再输出包含文件的内容。

     

    4.4.7 insert

    Insert最大的特点是不缓存。他的参数可能会缓存。但是insert所调用的函数内部不缓存。

    {insert name=”函数名称” script=”包含函数的脚本”var….=”函数参数” assign=” 指定一个变量保存调用的输出”}

    Insert调用的函数有特别的规定,函数格式必须是“smarty_insert_函数名称($params,&$smarty)”,

    从insert传入的参数,会统一放到数组变量中,参数名为该数组的键值。

     

    例子:

    {insert name=”maxnum” script=”s2.php” x=12 y=13 assign=nn}   #模板文件,script为保存调用函数的脚本

    {foreach $nn as $n}

    {$n}

    {/foreach}

    function smarty_insert_maxnum($arr)   #函数脚本文件

    {

    return $arr['x']>$arr['y']?$arr['x']:$arr['y'];

    }

    如果规定了assign ,则调用函数的记过不会马上输出,输出的数据将存储到assign指定的变量里,

    这样可以根据实际情况,再输出包含文件的内容。

    Insert也可以定义成组件,写入组件库中,详情请参考6.8.5

     

    4.4.8 if,elseif,else

    {if $name eq “Fred”}

    Welcome Sir.

    {elseif $name eq “Wilma”}

    Welcome Ma’am.

    {else}

    Welcome, whatever you are.

    {/if}

    这个没有什么太好说的。比较操作符可以是 “==、>=”等,也可以是”eq、ne”等,这个看手册吧。

     

    4.4.9 ldelim,rdelim

    这个也很简单,分别替换smarty当前规定的左边界符和右边界符。一般成对使用。

     

    4.4.10 literal

    Literal 标签区域内的数据将被当作文本处理,此时模板将忽略其内部的所有字符信息。

    该特性用于显示有可能包含大括号等字符信息的 js、css 。当这些信息处于 {literal}{/literal} 标签中时,

    模板引擎将不分析它们,而直接显示。

     

    4.4.11 strip

    Smarty 在显示前将除去任何位于 {strip}{/strip} 标记中数据的首尾空格和回车。

     

    4.4.12 php

    php 标签允许在模板中直接嵌入 php 脚本。 {php}标签默认是关闭的,可以通过如下方式打开

    $smarty->setAllow_php_tag(true)   #设置开启识别php的标签

    $smarty->getAllow_php_tag()       #获得当前对{php}的支持状态

     

    4.4.13 for,while

    这是3.0新增的函数。语法类似于php,这两个函数都不适合关联数组

    {for $x=0, $y=count($foo); $x<$y; $x++}  ….  {/for}

    {for $x=0 to count($foo)-1 step 1}

    第二种方法,支持for的内置变量。第一种不支持。

    $x@iteration   #当前循环次数

    $x@total     #总循环次数

    $x@first  #循环第一次

    $x@last     #循环最后一次

    {while true}….{/while}

    While没有内置变量。

    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-84-4965-1.html
    相关热词搜索: