我在使用ThinkPHP3.1 + smarty,最近,参考了别人的代码,发现并试用了smarty插件,通常情况是把smarty插件放在smarty/plugins/目录下,但这样不大灵活。为了在使用ThinkPHP时,在各个项目中使用不同的smarty自定义插件,就得各自独立安放插件了。
我做了试验,可以起作用。
1.修改ThinkPHP中的smarty配置,在ThinkPHP\Extend\Vendor\Smarty修改Smarty.class.php文件,把96行附近的
var $plugins_dir = array('plugins');
修改为
var $plugins_dir = array('plugins',COMMON_PATH);
2.在项目目录中安放自定义插件,如:
home/Common/function.load_data.php
其中,home/Common/是项目函数路径,function.load_data.php是smarty的插件。
3.在模板中就可以使用自定义插件了,如:
{load_data assign="arr" sql="select" where_array=$smarty.get.uid }
{foreach from=$arr item=list}
{$list.xxx}
{/foreach}
其中,load_data是函数名,arr是输出数组的名称,sql,where_array则是自定义的其他的配合function.load_data.php的部分。
4.这样一来,有很多数据的抓取,就可以直接在模板中编写了,而不用去编写php了。
5.这样做的目的是为了使smarty共用,但插件相互独立。smarty寻找插件时,会根据插件配置路径来查找插件,这个$plugings_dir是一个数组,所以多个路径就使用多个数组元素。COMMON_PATH是ThinkPHP项目函数路径的常量