关于smarty自定义标签的思考

2011-01-03

关于smarty自定义标签的思考关于smarty自定义标签的思考

*/
//1 . 需求
//我希望在模板中中这样使用它
{mytag ac='getlist' var='artlist' channelid='2' categoryid='BD' limit='50'}
{foreach from=$artlist item=i key=k}
{*line*}
{$i.title}
{/foreach}

//2 . 解决
//我的自定义标签函数可以这样写
function mytag($params,&$smarty)

include_once 'functions.for.tpl.php';
$ac = $params['ac'];//确定要使用的动作
$var = $params['var'];//确定结果返回的变量
unset($params['var'],$params['ac']);
// get smarty instance
$smarty->_tpl_vars[$var] = call_user_func($ac,$params);//将结果传递给当前$smarty的$var变量

$tpl = new Smarty;
$tpl->register_function('mytag','mytag');//1.标签名,2.函数名
//3 . 完善
//在模板标记中可以这样简化标签
{mytag var='artlist' item='i' key='key' ac='getlist' channelid='2' categoryid='BD' limit='50'}
{*line*}
{$i.title}
{/mytag}
//理论上,是完全可以把它用正则还原为1步骤中的原文(预编译),但是预编译之后再传给smarty是否需要建立一个模板文件?