最近做一个项目,要用到smarty模板引擎,于是花了点时间学习了下。期间碰到一个应用,想在模板文件内将一个字符串定义成数组循环。通常做法可以在php文件内定义数组,然后以变量形式传给模板文件。但我只是想在模板文件内生成一串循环的HTML(比如生成10个select的option,中间有循环的自定义属性),节省些代码,而并不需要与php文件有任何的数据交互,所以最好能在模板文件内直接定义数组。把smarty手册找了个遍,没有发现内置的函数有如此功能,于是去扩展函数库(Plugins)找,也没有发现,那就干脆自己写一个吧。
其实象assign,cycle,还有生成HTML代码的html_image,html_radios其实都是扩展函数,可以在Plugins目录下找到这些函数。研究了几个函数的代码还是蛮简单的,于是参考了一下,写了用于定义字符串数组的array函数,代码如下:
在模板文件内的调用方式为{array var="aa,bb,cc,dd" assign="arrayoptions"}
其中params有3个参数,第一个是欲定义的字符串$params['var'],第二个是数组名称$params['assign'],第三个是字符串分割符params['separator'],默认是",",可以不传。字符串可以在调用时直接列举,也可以是某个变量,比如来自php输出的。
然后就可以循环语句了
smarty中有内置的html_options函数,它需要php抛出定义好的数组。现在有了这个array函数,那就直接可以在tpl中定义数组了,而且可以应用到很多方面。
提供此扩展函数下载,放在smarty的plugins目录下便可使用
Download ( 390 downloads)
其实象assign,cycle,还有生成HTML代码的html_image,html_radios其实都是扩展函数,可以在Plugins目录下找到这些函数。研究了几个函数的代码还是蛮简单的,于是参考了一下,写了用于定义字符串数组的array函数,代码如下:
function smarty_function_array($params, &$smarty)
{
if (!isset($params['var'])) {
$smarty->trigger_error("array: missing 'var' parameter");
return;
}
if (!isset($params['assign'])) {
$smarty->trigger_error("array: missing 'assign' parameter");
return;
}
if($params['var'] == '') {
return;
}
if(!empty($params['separator'])) {
$_contents = explode($params['separator'],$params['var']);
} else {
$_contents = explode(",",$params['var']);
}
$smarty->assign($params['assign'], $_contents);
}
{
if (!isset($params['var'])) {
$smarty->trigger_error("array: missing 'var' parameter");
return;
}
if (!isset($params['assign'])) {
$smarty->trigger_error("array: missing 'assign' parameter");
return;
}
if($params['var'] == '') {
return;
}
if(!empty($params['separator'])) {
$_contents = explode($params['separator'],$params['var']);
} else {
$_contents = explode(",",$params['var']);
}
$smarty->assign($params['assign'], $_contents);
}
在模板文件内的调用方式为{array var="aa,bb,cc,dd" assign="arrayoptions"}
其中params有3个参数,第一个是欲定义的字符串$params['var'],第二个是数组名称$params['assign'],第三个是字符串分割符params['separator'],默认是",",可以不传。字符串可以在调用时直接列举,也可以是某个变量,比如来自php输出的。
然后就可以循环语句了
{section name=option loop=$arrayoptions}
<option value="{$arrayoptions[option]}">{$arrayoptions[option]}</option>
{/section}
<option value="{$arrayoptions[option]}">{$arrayoptions[option]}</option>
{/section}
smarty中有内置的html_options函数,它需要php抛出定义好的数组。现在有了这个array函数,那就直接可以在tpl中定义数组了,而且可以应用到很多方面。
提供此扩展函数下载,放在smarty的plugins目录下便可使用
Download ( 390 downloads)
很方便的函数,正在思考用smarty定义数组的问题。感谢老乡
gis
2009/08/03 22:22
正在为这个问题发愁,正好看到你的文章,终于解决了问题,谢谢
smarty
2008/08/01 23:42
Pages: 1/1
1
1
Add a comment




雪中天寓
[小品]梅

