在smarty模板中调用PHP自定义函数(从smarty2到smarty3)

 

这两天研究了一下smarty,熟悉了它的一些基本语法后便开始用它开发一个留言版(真正的开发中一般不会有程序员使用smarty去开发一个留言版的,杀鸡焉用牛刀?),主要是为了将所学的知识点串联起来。在开发的过程中,遇到了一个问题,如题,我在PHP文件中定义了一个函数,现在想在.tpl模版中调用,该如何调用呢?通过在网上查找一些资料,下面给出具体的解决方案:

大家都知道,在smarty中提供了许多在模板中使用的调节器,但是在很多时候,这些调节器无法提供我们需要的功能,这时候,我们就需要自己定义PHP函数,然后在模板中调用。

首先,谈谈在smarty2中的解决方法:

在smarty2中提供了一个函数,register_function,在官方文档上它的原型为

void register_function(string name,
                       mixed impl,
                       bool cacheable,
                       mixed cache_attrs);

我们可以使用该函数来动态注册在模板中使用的自定义函数,它的第一个参数是我们将在模板中使用的函数名,第二个参数是我们定义的PHP函数名,该参数既可以是一个包含函数名称的字符串,也可以是一个array(&$object,$method)数组,其中&$object是表示对象引用,$method表示该对象的方法,第三个和第四个参数在绝大多数情况下都可以省略。它的用法很简单:下面给出一个简单的例子并加以说明 :

 

 

 

 

 

 

在服务器端,也就是PHP文件中,我定义了自己所需的功能函数htmlcode函数,然后使用register_function函数将它注册到format_content中,其中,format_content就是在模板中使用的函数名,在模板中,我们使用{format_content 参数1 参数2 ……}来调用函数,其中函数名后之后带的参数(参数1,2等等)被组合中一个数组作为实参传入到了PHP自定义函数中,本例中,,cont参数被组合成只有一个元素的数组传入到了htmlcode函数中来进行调用,也就是说htmlcode的形参$paras是一个数组,它的每一个元素对应我们在模版中给它传递的一个参数。

说到这里,大家应该知道该如何使用了吧,好了,下面来谈谈在smarty3中的解决方法。

在smarty3中,我尝试用register_function函数,可出现了function call 'register_function' is unknown or deprecated的错误,于是我差了一下官方的文档,发现register_function这个函数在smarty3中已经被淘汰了,取而代之的是一个名为registerPlugin的一个功能更为强大的函数,该函数的原型为

void registerPlugin(string type,
                    string name,
                    mixed callback,
                    bool cacheable,
                    mixed cache_attrs);

可以看到,该函数仅仅比register_function多了第一个参数,string type,那么该参数是做什么用的呢?文档上是这么定义的:

type defines the type of the plugin. Valid values are "function", "block", "compiler" and "modifier".

翻译过来也就是说该参数定义了插件的类型,有效值为"function","block","complier","modifier"中的一个,看到这里大家应该明白了吧,在register_function中,只能注册function这一种类型,而该函数可以注册四种类型,其余的用法和register_function基本一致。

在list.html中,我们不需要改动,而仅仅需要在PHP文件中稍作改动:

 

 

 

OK,大功告成!

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值