Smarty自带一些内建函数. 内建函数是模板语言的一部分. 用户不能创建名称和内建函数一样的自定义函数,也不能修改内建函数.
一.包含的内建函数
{$var=...}{append}{assign}{block}{call}{capture}{config_load}{debug}{extends}{for}{foreach},{foreachelse} @index @iteration @first @last @show @total {break} {continue} {function}{if},{elseif},{else}{include}{include_php}{insert}{ldelim},{rdelim}{literal}{nocache}{php}{section},{sectionelse} .index .index_prev .index_next .iteration .first .last .rownum .loop .show .total {setfilter}{strip}{while}
1.变量赋值函数 简单赋值: {$userdalong='dalong'} 使用函数: {$first=5} {$second=6} {$Addresult=$first+$second} Addresult:{$Addresult} 赋值对象对象或者数组 {$user.name="Bob"} user.name={$user.name} 2.append 是对于已经创建的模板变量进行穿件添加: {append var='name' value='Bob' index='first'} {append var='name' value='Meyer' index='last'} The first name is {$name.first}.<br> The last name is {$name.last}.<br> 3.assign 用于添加变量 {assign var="dalong" value="Smarty dalong demo" scope="global"} 可以使用php 进行访问 代码如下: <?php require_once 'smartyUser.php'; $ user=new smartyUser(); $user->fetch('conf.tpl'); // 没有这句不会输入任何信息 echo $user->getTemplateVars('dalong'); ?> 结果输出: Smarty dalong demo 同时我们也可以进行动态的修改 <?php require_once 'smartyUser.php'; $user = new smartyUser (); $user->fetch ( 'conf.tpl' ); echo $user->getTemplateVars ( 'dalong' ); echo '<br>'; $user->assign ( 'dalong', 'we change the default value' ); echo $user->getTemplateVars ( 'dalong' ); ?> 同上 输出结果如下: Smarty dalong demo we change the default value 4. block 进行模块化显示 如下: parent.tpl <html> <head> <title>{block name="title"}Default Title{/block}</title> <title>{block "title"}Default Title{/block}</title> {* short-hand *} </head> </html> child.tpl {extends file="parent.tpl"} {block name="title"} Page Title {/block} php <?php require_once 'smartyUser.php'; $user = new smartyUser (); $user->display('child.tpl'); ?> 输出: <html> <head> <title>Page Title</title> </head> </html> 5. call 进行模板函数的调用 模板func 代码如下: {* define the function *} {function name=menu level=0} <ul class="level{$level}"> {foreach $data as $entry} {if is_array($entry)} <li>{$entry@key}</li> {call name=menu data=$entry level=$level+1} {else} <li>{$entry}</li> {/if} {/foreach} </ul> {/function} {* create an array to demonstrate *} {$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' => ['item3-3-1','item3-3-2']],'item4']} {* run the array through the function *} {call name=menu data=$menu} {call menu data=$menu} {* short-hand *} php : <?php require_once 'smartyUser.php'; $user = new smartyUser (); $user->display('func.tpl'); ?>
显示结果:
6.capture capture函数的作用是捕获模板输出的数据并将其存储到一个变量里,而不是把它们输出到页面. 任何在 {capture name="foo"}和{/capture}之间的数据将被存储到变量$foo中,该变量由name属性指定. 在模板中通过 $smarty.capture.foo 访问该变量. 如果没有指定 name 属性,函数默认将使用 "default" 作为参数. {capture}必须成对出现, 即以{/capture}作为结尾,该函数不能嵌套使用. {* we don't want to print a div tag unless content is displayed *} {capture name="banner"} {capture "banner"} {* short-hand *} {include file="get_banner.tpl"} {/capture} {if $smarty.capture.banner ne ""} <div id="banner"> {$smarty.capture.banner} </div> {/if} 7.extends 这种标签是在自模板中使用的,子模板是继承自已经存在的父模板。 8.for 进行循环操作 $smarty->assign('start',10); $smarty->assign('to',5); <ul> {for $foo=$start to $to} <li>{$foo}</li> {forelse} no iteration {/for} </ul>