正在加载...

说句实话,个人是非常的不喜欢Smarty这个PHP的模板插件~~Why?可能是我比较偏置,就是认为:

  1. Smarty的运行速度远远没有SmartTemplate快
  2. Smarty的功能强大是毋庸置疑——但是,功能强大是建立在模板引擎中进行不少的逻辑处理,和我理想中的逻辑和页面尽可能的分开相去甚远~~模板中混合了一部分的逻辑处理,那样子还不如直接HTML和PHP混合写。
  3. 当然,Smarty能成为PHP中大多数人都愿意去学的模板引擎不是没有道理的!不过我个人还是认为,Smarty给页面制作人员来使用是非常好的。他们不懂得或者不精通PHP,所以很多情况下的逻辑需要用Smarty提供的功能来解决!但是对于我们写PHP的人而言,所有的逻辑完全可以在PHP中处理好了再传递给页面。页面仅仅是需要处理非常简单的逻辑,比如<!– IF exist=1 –>这种近乎正常人都能看懂的逻辑处理
  4. 当然,这仅仅是一个个人见仁见智的想法,不代表大多数人的看法。

对于ThinkPHP也不想做过多的介绍,至少我认为这个框架很简单,并且功能也非常强大!对于我这种正宗的PHP菜鸟都能很轻松的使用!内置的CURD操作也是非常成熟,包括ORM查询(虽然我个人认为这种方法会使得我们看懂SQL语句要多转一道弯)都是很不错的设置!最让我觉得开心的事情就是,MVC在ThinkPHP是绝对的分开的(lib/Action、lib/Model、Tpl三个目录),怎么看都觉得虽然这个框架没有Zend FrameWork那么庞大,但是对于对敏捷要求很高的PHP开发中还是非常适合的~~(ZF的粉丝不要拍我)

说了我对TP和ST的看法之后,就轮到来说要命的事情了——TP中没有内置对ST的支持,TP官方的插件中也没有ST的插件~~TP内置的ThinkTemplate实在是让我觉得不爽~一个模板搞那么多干嘛啊??用Smarty又觉得不爽。算了,还是自动动手来写一个ST的插件算了~~经过几番折腾,最终是写好了~大概有下面这么几点:

  1. 在ThinkPHP/PlugIns下面新建一个目录SmartTemplate,在这个目录中写入一个SmartTemplate.php的文件,文件内容下详。
  2. 在你的项目目录中新建一个PlugIns目录,也同样新建一个SmartTemplate(其实这个目录是可以随便名称的,因为在1中提到的SmartTemplate.php中需要设定require_once路径的)目录(这个地方我犯了很多次错误,因为我把所有的ST文件全部放到了1中说的位置!!最后将路径echo出来看了一下才发现原来不是!!),并且将ST的所有文件(注意是文件,不是文件夹)拷贝到这个文件夹,至少需要class.smarttemplate.php等三个文件,另外那个文件夹不是一定需要(是ST的一些插件)。
  3. 在项目配置文件_config.php中加上下面两句”THINK_PLUGIN_ON”=>true,”TMPL__ENGINE_TYPE”=>”SmartTemplate”.进行完这些步骤之后,就可以在TP中调用ST的模板引擎来是使用了~~
  4. 这一点其实是最扯淡,也最容易出错的地方,就是在Action中对模板进行赋值的操作,我在这个地方错了N多次最后看了一些源代码才给弄明白~~在Action中的赋值操作时assign,好像所有的模板都是这样子赋值的,但是这个显示的时候就不太一样了,有些是output,有些事display,还有一些我不知道的。那么在Action中怎么办呢?好办!所有的assign之后,不论什么模板引擎,都是使用display。这个display其实并不是模板引擎中使用的输出,而是Action方法中的一个函数!这个函数的作用是调用你选定的模板引擎将它显示出来,于模板引擎无关!!模板引擎的操作,全部在第一步中说到的那个php文件中进行操作!!从这里也可以看出来,如果在TP中需要更换模板引擎的话,需要改动的文件仅仅是模板,和逻辑没有任何关系!!从这里深刻看出来通用接口的好处啊;)

到了这一步,你已经可以完全使用ST写模板,用TP写逻辑了!所有的逻辑都在PHP中解决好,其实在我看来也是无痛更换模板引擎的好办法,模板么,需要的仅仅是将页面显示出来。至于逻辑,还是交给PHP来做就可以啦;)

PS:smarttemplate.php的内容如下

<?php
/*
Plugin Name: SmartTemplate
Template URI:
Description: SmartTemplate模版引擎插件
Author: LorryChenls
Version: 0.1
Author URI: http://www.chenliansheng.cn/
*/
function SmartTemplate($templateFile,$templateVar,$charset,$varPrefix=”)
{
$templateFile=substr($templateFile,strlen(TMPL_PATH));
include_once(PLUGIN_PATH.”SmartTemplate/class.smarttemplate.php”);
$tpl = new SmartTemplate($templateFile);
$tpl->caching = true;
$tpl->template_dir = TMPL_PATH;
$tpl->temp_dir = CACHE_PATH ;
$tpl->cache_dir = TEMP_PATH ;
$tpl->assign($templateVar);
$tpl->output();
return ;
}
if(’SMARTTEMPLATE’== strtoupper(C(’TMPL_ENGINE_TYPE’))) {
add_compiler(’SmartTemplate’,'SmartTemplate’);
}
?>

: http://www.breestealth.com/64/plugin_of-_smarttemplate_in_thinkphp.html

本文相关评论 - 1条评论都没有呢

还没有任何评论。