[转载]Smarty高级特性 – 用户自定义函数使用 SMARTY:: register_function;
不难看出,我们很轻松的就布署使用了我们的自定义函数了。有一点我们需要注意到的是,在format_data函数里,我们是以一个数组对值进行传入的,而在模板文件里,我们可以任意的建一些关键字,只要你能记得住。当然,除了SMARTY的保留字之外。
而后我们通过extract把这个数组里面的值释放放出来,当然这种方案是有多种多样的,你可以使用list,也可以使用explode,总之你能想到的posttime&titlelen=17&and[stauts]=1&limit=5&order=id DESC&tpl=afiche.right"}
[/php]
上面的函数执行流程是这样子的:
在模板文件里面,我们使用phpsoho这个资源句柄把请求定位到'tags_extends'函数中,在这个函数中,我们做了几种检查:
Check Action:检查动作是否被设置,这个为必须的关键字.其实我是以这个action来进行下面的函数定位操作的.
Check function_exists:检查相应执行的函数是否存在或者是否已经被加载进入
这里我们不用检查optional,因为我们会在下一步里进行另一步检查.
$action($optional)被执行,也就是说上例中的getAffiche被引入了,并且设置$optional的值为fileds=id,title,posttime&titlelen=17&and[stauts]=1&limit=5&order=idDESC&tpl=afiche.right,里面的一些一一对应的关系,我就不一一过多的讲解。我是有文档给小张的,你们谁想要,可以联系她。她可是美女哟~!
回过头来,我们看$action($optional),为什么我说看$action而不是getAffiche呢?因为谁知道你将来会让他引入什么函数呢?(狂笑,得意的笑)
$action()DEMO:
[php]
function getAffiche($optional)
{
global $db;
parse_str($optional);
$res = $db->getFetchArray('litou_affiche',$fileds,$and,$order,$limit);
/**
??* 声明并发送到模板
*/
$smarty = set_smarty();
$smarty->assign('titlelen',$titlelen);
$smarty->assign('affiche',$res);
$smarty->display( $tpl .$GLOBALS['tplEx']);
}
[/php]
大家看到了吗?原来如此简单。。。
原来我们在函数的内容完成了指定内容的一些操作。当然,我这个完全是为了写这篇文章临时写出来的,但你们可以在这里面加上一些php的高级特性,比如:缓存,在你的字符上加入cache=3600(一般我们使用的是秒,就是一个小时),那你可以通过上面的一些关键词定义引入你的cache,并且可以根据时间来更新后引入,加上过滤或者其它任何你想要的功能。
总之,只要你有想法,一切皆有可能。
知识点:
[php]
parse_str, Parses the string into variables
void parse_str ( string $str [, array &$arr ] )
[/php]
这是个很好用的函数,包括它的家族兄弟们 parse_ini_file及parse_url,具体用法自己去测试。
汗,快下班了,估计今天写不完高级使用了。。。先简单介绍一下,留个悬念,以后再过来编辑一下。
高级篇
小张很开心。这样她仅仅只需要使用这一个函数就行了,并且里面需要的记的也不多,A4纸一张不到。但苦了我呀,小张经常这样说:头哥,我需要取出一些图片资料,并且要求横排四张,竖排八张@$#^%$%*&^*&(*&(),,,,天啊,我做错了吗?我不得不给她写N多的函数,让她使用...
每次看到小张一脸诡笑的样子,我心里在发汗,唉。不行,我要再进行深入的研究…
未完待续…