最近在使用Smarty模板引擎。可能由于刚刚开始对Smarty还不熟悉。总觉得很多地方使用起来不能随心所欲。
我之前整理有一个调试数据专用的dump函数。用于打印输出变量或者数组。主要应用了print_r()函数。
使用Smarty之后就必须把这个函数应用到Smarty中。否则将无法在页面中输出。【请注意,是漂亮的输出】。
虽然我可以在Smarty的display之前使用dump函数。但是作为一个对UE天生敏感的我,当然不喜欢那么难看的调试模式。
粗略研究了一下Smarty的帮助手册。我意识到自己应该为Smarty添加一个函数插件来解决我的问题。
尽管,这个问题就是单纯的在模板中使用print_r()来漂亮的显示一个变量或者数组。
ok,开始吧!Smarty的插件统一都放在plugins目录下。如果命名规则正确,Smarty会根据是否使用而选择性加载。这点确实很牛x哦。
虽然你的plugins目录下可能一大堆插件。但是如果在模板编译时候没有使用到这些功能,那么Smarty是不会加载他们的。这实在是让我很佩服。
如果你的Smarty目录下没有plugins那就自己建立一个。比如我从官方下载的Smarty解压后就只有一个sysplugins目录和smarty.class.php。
关于插件的命名规则不做详细介绍Smarty的帮助里写得很清楚。我现在只是扩展一个自写函数。所以我新建了一个php文档,命名为:function.dumper.php 意思就是说我扩展了一个函数为dumper的Smarty函数(插件)。编写代码如下:
<?php /** * * Smarty 函数插件 * */ /** * 用于调试在模板中输出变量或者数组 */ function smarty_function_dumper($params, &$smarty) { mycodes... } ?>
可以看出函数命名遵循smarty+function+函数名称的规则。只有这样Smarty才能承认它。接下来解释一下$params和&$smarty这两个东西。
他们两个都是Smarty引擎里的东西可不是我们函数预定义的变量。
当然,我见到有人在函数中预定义变量来使用。但是工作机制是什么,怎么用?我还不是很清楚。我这里只介绍一下我搞清楚的用法。
$params是在模板中调用函数时传递过来的数据。也就是函数要处理信息的来源。
&$smarty则是Smarty引擎对象,如果你要对Smarty进行一些高层次的改进那就要用它了。我们这里当然用不到。(那为啥还写上?为了混淆你的试听……)。
然后我们预定义一个变量$vars进行print_r()。如下:
print_r($params[vars]);
在模板中调用一下看看效果:
{dumper vars=$debug_msg}
函数名称 变量=数据。这里我将一个数组$debug_msg赋给vars传入dumper查看结果。
oh,yeah!熟悉的print_r()效果出现了。根据这个函数调用模式我当然还可以多定义几个变量用作选项。如:
{dumper vars=$debug_msg label=”调试数据”}
在插件函数中只需要使用$params[label]即可访问。
好,既然已经解决了核心问题。接下来就让它变得美丽些吧。这需要一些前端知识了。
我将所有输出信息放到一个id为dump_box的div中。然后对div使用绝对定位。为了美观,增加半透明效果。为了数据显示清晰,采用pre无损显示html。为了更人性,我使用Jquery加入动态的关闭效果。
具体代码就不在这里贴了。打个包提供下载。如果有什么问题可以留言咨询。