4.5 系统自定义函数
4.5.1 assign
{assign var=”name” value=”韩灵稚” nocache=”false”scope=”global”} #在模板中定义
$smarty->assign($tpl_var, $value = null, $nocache = false, $scope = SMARTY_LOCAL_SCOPE)
#在php文件中定义
nocache决定了是否需要不缓存该变量(前提是需要启动缓存)。
scope 决定了变量的作用范围,有global、parent、local
【相关函数】
$smarty->assignGlobal($varname, $value = null, $nocache = false) #直接分配一个全局的变量
$smarty->assignByRef($tpl_var, &$value, $nocache = false, $scope = SMARTY_LOCAL_SCOPE)
#分配一个引用变量,适合传递的变量较大,比如对象类型,可以防止内存拷贝。
$smarty->clearAssign($tpl_var) #清楚特定的变量
$smarty->clearAllAssign() #清除所有分配的变量
4.5.2 append
3.0新增的函数,向模板中分配的变量,该变量可以接受多个值,从而成为变量数组。
$smarty->append($tpl_var, $value = null, $merge = false, $nocache = false, $scope = SMARTY_LOCAL_SCOPE)
#php文件中
{append var=”name” value=”2″} #模板文件中
例子:
$smarty->assign(‘nh’, ‘var1); #分配一个变量模板,值为var1
$smarty->append(‘nh’,’var2′); #对同一个变量,在追加一个值。nh模板变量为数组。
{$nh[0]} #在模板文件中使用第一个值
$merge,应该是是否合并原值,目前版本测试的时候,不起任何作用。
【相关函数】
$smarty->appendByRef($tpl_var, &$value, $merge = false) #添加一个引用变量到模板变量中,$merge不起作用。
4.5.3 counter
计数器。当第一次出现{counter}时开始计数,每次出现{counter}按照规定的计数。
{counter start=开始(1) skip=步阶(1) direction=递增/递减(up/down) print=是否显示(true) assign=输出给模板变量}
counter除了start和assign ,其他属性的设置,会对一下次的counter起作用。如果规定了assign ,
则包含文件不会马上输出,模板输出的数据将存储到assign指定的变量里, 这样可以根据实际情况,
再输出包含文件的内容。
4.5.4 cycle
用于轮转使用一组值。当第一次出现{cycle}时开始,每次出现{cycle}轮换每个值。
{cycle name=名称 values=一组值 print=是否输出(true) advance=是否使用下一个值(true)
delimiter=一组值中的分隔符(,) assign=输出给模板变量}
4.5.5 debug
什么也不说了,一个字强大。用了你就知道了,在需要设断点的地方写入{debug}
如果使用fetch(),则debug失效。只能使用display()。
{debug output=输出的格式(javascript/html) } #模板声明调试,,可以选择输出的方式默认是js窗口。
$smarty->getDebugging() #得到当前是进行调试,默认false
$smarty->setDebugging(true) #对后续调用的模板进行调试。
$smarty->getDebug_tpl() #获得调试所需要的tpl模板,可以自己修改。
$smarty->setDebug_tpl(‘new_debug.tpl’) #重新指定新的用于调试的模板
4.5.6 eval
eval 按处理模板的方式计算取得变量的值。个人感觉用处不大,对缓存支持不好。
4.5.7 fetch
fetch 用于从本地文件系统、HTTP或FTP上取得文件并显示文件的内容。
如果文件名称以”http://”开头,将取得该网站页面并显示。
如果文件名称以”ftp://”开头,将从ftp服务器取得该文件并显示。
{fetch file=”/export/httpd/www.domain.com/docs/navbar.js”}
{fetch file=”ftp://user:password@ftp.domain.com/path/to/currentheadlines.txt”}
{fetch file=”http://www.myweather.com/68502/” assign=”weather”}
{if $weather ne “”}<b>{$weather}</b>{/if}
调用的文件内容,如果能被html解析,则会输出解析内容
【相关函数】
$smarty->fetch($template, $cache_id = null, $compile_id = null, $parent = null)
#将模板输出的内容放入变量中,供以后使用,如果规定了编译id,
比如3,则编译后的文件名称为“3^常规名称”,缓存id同理。
$output = $smarty->fetch(“index.tpl”);
// do something with $output here// 对将要输出的内容进行处理
echo $output;
4.5.8 math
math 允许模板设计者在模板中进行数学表达式运算.
{math equation=自定义公式 [var…]=变量值 format=结果格式化字符串 assign=输出给模板变量}
4.5.9 popup_init,popup
输出javascript窗口。
{popup_init src=”/javascripts/overlib.js”} #popup_init载入js文件,必须的。
{popup text=”弹出信息”} #个人感觉意义不大,参数很多,可以看chm
4.5.10 textformat
textformat 用于格式化文本。该函数主要清理空格和特殊字符,对段落按单词边界换行和行缩进等段落格式化处理。
与变量调节器类似,优点是可以调整段落,参数具体看文档。
{textformat [修改参数….]}
需要修改的段落
{/textformat}
4.5.11 html_checkboxes
根据函数生成checkboxes(多选)页面元素。
{html_checkboxes name=名称(checkbox) values=值数组 ouput=显示数组
selected=已显示的元素或者数组,数组值为values options=代替(value+output)可用关联数组
separator=分隔每个复选按钮的字符串 label=是否为每个复选按钮添加 <label> 标签(true)}
{assign var=cb_values value=[1,2,3,4,5,6] scope=”global”}
{assign var=cb_content value=['北京','广州','天津','石家庄','太原','济南'] scope=”global”}
{assign var=cb value=['1'=>'北京','3'=>'广州','2'=>'天津','4'=>'石家庄','5'=>'太原','6'=>'济南'] scope=”global”}
{assign var=cb_selected value=[1,2]}
{html_checkboxes name=”checkbox” values=$cb_values output=$cb_content selected=$cb_selected
separator=”|”}
{html_checkboxes name=”checkbox” options=$cb selected=$cb_selected separator=”|”}
4.5.12 html_image
意义不大,直接写html可能会更好,不能生成img标签的id和name属性
{html_image file=图片路径和名称 border=边框 height=高度 width=宽度 alt=alt内容 href=图片url}
4.5.13 html_options
{html_options name=下拉菜单名称 values=值数组 ouput=显示数组 selected=已显示的元素 options=代替(value+output)可用关联数组}
注意,如果没有添加name属性,需要自己加入<select></select>标记。
如果selected是一个数组且不能多选,则选择数组的最后一个值作为以选择的。
4.5.14 html_radios
{html_radios name=名称(radio) values=值数组 ouput=显示数组
selected=已显示的元素options=代替(value+output)可用关联数组 separator=分隔每个复选按钮的字符串}
4.5.15 html_select_date,html_select_time,html_table
意义不大,有局限性,不如手写。看手册吧。
4.5.16 mailto
{mailto address=发送邮箱 cc=抄送邮箱 bcc=暗送邮箱 subject=主题 text=链接内容 encode=编码形式(javascript/hex)}
具体看手册吧,测试中字符集格式转换有问题。
4.6 模板中自定义函数
3.0以后可以在模板内创建函数,而不需要一定先注册或者建立组件。
{function name=函数名 [var…]=默认值} #定义函数
函数体。。
{/function}
{call name=函数名 [var…]=传值} #调用函数,调用函数的代码一定要放在函数定义代码之后
{函数名 [var…]=传值} #也可以这样调用