ThinkPHP中如何使用Smarty第三方插件
ThinkPHP中如何使用Smarty第三方插件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
1、在项目的Conf/Config.php文件里加上:
returnarray( 'THINK_PLUGIN_ON'=>true, 'TMPL_ENGINE_TYPE'=>'smarty', );
2、下载好Smarty,并将smarty的libs目录整个拷至项目的PlugIns目录下(说明一下,PlugIns目录可能会不存在,需要自己建立),同时将libs目录改名为SmartTemplate(希望没有记错,其实也就是与THINKPHP的PlugIns目录里的SmartyTemplate目录同名即可),如果你不愿意把目录改成这个名字,那么,你必须到TP的插件目录里修改插件文件,使之包含路径正确。
3、注意修改每次修改action或模板文件后删除Temp下的html文件
说明一下:上面的内容来自于官方,由lin_chaoqi朋友解答的,网址为:http://bbs.thinkphp.cn/viewthread.php?tid=305&highlight=smarty
在这里我要提的方法是于上面不一样的,黑黑因为我在使用第三方模版插件的时候,特地看了TP的view.class.php发现了一些很重要的问题,那就是,如果采用第三方模版插件,那么第三方模版插件的效率可能不能保证,因为View类的fetch方法在判断是否为第三方插件之间,作了很多TP模版插件的自有处理,而这些对于使用第三方模版插件来说,几乎是完全无效的,这些处理可能会给第三方插件带来影响,同时也影响了第三方插件的执行效率。问题已经与流年沟通过,但由于改动可能会很大,或许最近几个版本里,流年都不会尝试作改进吧,一是怕影响了那些已经使用第三方插件的程序,二来如果去除掉这些处理,那么View类可能就不需要了。流年对于这样的情况应该是不愿意看到的。毕竟这也影响了原有系统的架构,估计流年得仔细考虑了……[当然从流年个人来说,肯定是希望大家都使用TP自有的模版插件,只是我目前对于smarty则是更加熟悉而己],但对于我这个使用者来说,我需要的是临时解决方法,所以,就有了下面的内容。
为了解决这个问题,我只有从View.class.php里下手,因为Action.class.php里有一行:
$this->tpl=View::getInstance();
那么,也就是说 tpl 这个变量是 View 的单例模式,检查了一下View.class.php中的这个getInstance方法,发现里面使用了 get_instance_of 这个函数(这个函数是有一点小BUG的,这里不作解释,但我目前也没有更好的解决方法),于是我对getInstance和__construct两个方法进行了改动,删除了__construct方法,加上了init方法,改动代码如下:
staticfunctiongetInstance(){ get_instance_of(__CLASS__,'init'); init($type=''){ $type)){ $this->type=strToUpper($type); $this->type=strtoupper(C('TMPL_ENGINE_TYPE')); in_array($this->type,array('PHP','THINK'))){ $type=ucfirst(strToLower($this->type)); vendor($type); $type(); $this; return } publicfunction if(!empty( }else{ } if(! returnnew } return }
也就是让View类在实例化的时候,同时调用init方法。在这个方法里,我将我自己的模版插件放到了第三方插件的目录(Vendor)下。
切记切记:千万不可漏掉最后一句return $this;,其实这就是我所说的get_instance_of的BUG,如果不加这句,那么当type变量为PHP或THINK时,getInstance是无法返回实例的。
新的使用方法步骤如下:
1、修改项目的Conf/Config.php文件:
returnarray( 'THINK_PLUGIN_ON'=>true, 'TMPL_ENGINE_TYPE'=>'TpSmarty', );
2、在TP的Vendor目录下面,创建TpSmarty.php,内容如下:
<?php include_once(PLUGIN_PATH."smarty/Smarty.class.php"); TpSmartyextendsSmarty{ __construct(){ parent::Smarty(); $this->caching=true; $this->template_dir=TMPL_PATH; $this->compile_dir=CACHE_PATH; $this->cache_dir=TEMP_PATH; ?> class publicfunction } }
上面是最简单的写法,实际使用中,这些变量请改为与你自己的站点相配合。
3、根据上面的文件里的include_once函数,将smarty的libs目录拷贝至项目的PlugIns目录下,改名为:smarty(只需要与include_once中的目录相匹配即可)
4、然后,在项目的方法里就可以直接使用:
classIndexActionextendsAction{ index(){ $this->assign('test','testss'); $this->display('default/index.html'); publicfunction } } }
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注恰卡编程网行业资讯频道,感谢您对恰卡编程网的支持。
推荐阅读
-
如何快速解决ThinkPHP5.1出现MISS缓存未命中问题
如何快速解决ThinkPHP5.1出现MISS缓存未命中问题这篇文...
-
thinkphp 6.0 swoole扩展websocket使用教程
-
PHP之ThinkPHP框架,让你10分钟快速入门,还免费包教会哟
-
ThinkPHP5.0目录结构,作用及其初略说明
-
Thinkphp在IIS7.5里的伪静态代码,亲测,收藏
-
哪些PHP开源作品值得关注
-
开源学校教务管理系统
-
一次项目中Thinkphp绕过禁用函数的实战记录
-
thinkphp如何用中间件记录行为日志
-
thinkphp3.1与3.2的区别有哪些
thinkphp3.1与3.2的区别有哪些今天小编给大家分享一下t...