求大神 解释smarty和thinkphp使用smarty的区别

ThinkPHP最好还是做好smarty的兼容工作 - ThinkPHP框架
[i=s] 本帖最后由 50030 于
09:06 编辑 [/i]
虽说,ThinkPHP觉得做好兼容smarty,比较麻烦,懒的搞那么多,但从使用的人来说,过于强调使用ThinkPHP自己的模板引擎,有些勉强人家,毕竟smarty的用户那么广,虽然ThinkPHP觉得自己的更好,但小刀菜刀各有所长,如果兼容不好,原来的程序改用ThinkPHP后,就的修改所有的模板,也确实非常麻烦。
如果能想PHP的发展那样,开始能比较好地兼容asp标签,到以后壮大了,再抛弃asp标签,那就更好了。
有些东西,过于自我,没多大意义,比如:
smarty循环中的foreach变成了ThinkPHP的volist,(尽管可以用别名,但要深入源代码,vo是啥?不明白)
from=$aa item=bb 改为 name="aa" id="bb",这种修改有什么实际作用吗?更别说smarty 原来就还有个name的东西,很容易兼容问题。
另外,越多的自动,就自动形成越多的条条框框,专注解决在开发中棘手的东西就好了,别搞太多费神费脑的东西。
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。为什么PHP中ThinkPHP有做类似模板引擎的东西?smarty也是?这些到底有何用?
我是真没发现它们的用处在哪里?分离了前端和PHP的依赖?HTML文件确实没有写PHP代码了,但是却有smarty或者Thinkphp的模板引擎代码在里面,PHP程序员要学,前端人员也要学,这不是反而增加了开发时间和开发难度?吃力不讨好?而且用了模板引擎势必要在PHP层面对HTML代码进行字符串替换解析,都知道字符串替换是很耗性能的,费时又浪费性能的。仅仅为了分离前端跟PHP,我觉得这相当不划算。是否我对其作用(仅仅为了分离前端和PHP,方便各司其职)理解有偏差?请赐教!
项目小,一个人折腾的时候,怎么快怎么来,构建MVC,解耦页面数据代价比较大,所以你会说没用;项目大了,人多了,代码复用、规划、编码规范、人员沟通的成本急剧上升。把每个人的工作连接起来,需要规则;减少条条框框的束缚,大家各司其责专注自己的工作,避免互相干扰,才能提高效率。回到你的问题。我分解成下面四个点:1. 为什么要出现模版引擎?2. PHP本身不就可以起到直接在HTML结构里面嵌逻辑脚本了吗?3.为什么又演变出独立的语法4.性能开销怎么考虑1. 为什么要出现模版引擎?Z:请设想有两个人合作一个项目,一个负责页面部分,一个后台数据。(其实就是前端与后台)那么他们应该专注在自己负责的部分。以页面的同学为例,他应该只关心数据如何呈现,如何交互,如何将用户数据传给后台。那么目前业内的实践经验是,前端与后台约定好页面参数及接口协议,即可各自独立开发。2. PHP本身不就可以起到直接在HTML结构里面嵌逻辑脚本了吗?Z:前面说到,合作中应该各自专注自身工作,避免互相干扰。页面的同学直接在页面模版中有可能操作PHP脚本中的全局变量、属性、方法;后台的同学在给页面传值后有可能意外修改到参数。。。这些都是因为他们的环境没能隔离开的缘故。那么比较好的方案就是给页面模版一个独立的参数作用域,将页面参数单独传递进去。3.为什么又演变出独立的语法为了减轻页面开发的学习负担,也让页面更加直观。请比较:&div&{{ innerHTML }}&/div&
&div&&?PHP echo $innerHTML; ?&&/div&
&div&&?= $innerHTML; ?&&/div&
PHP满屏的 分号 + 美元符 其实还真是有很多人看不惯的。页面的同学如果没有接触过PHP,估计会被“缺少一个分号没法运行”之类的问题烦死。而且一般页面也不需要处理复杂的逻辑,条件判断 + 循环 + 变量输出 + 转义 应该已经足够了,所以实现一个简洁的语法对独立的前端开发是很有帮助的(顺带一提,这些模版引擎应该也是支持以原生PHP方式来写模版的)4.性能开销怎么考虑毋庸置疑,性能肯定没有原生PHP来得快。但是权衡上述,其实也是值得的;何况性能这种东西,说实在的几个模版解析还真不是瓶颈所在。后台数据的处理,页面资源加载等等才是大头。何况现在的PHP模版引擎都支持预编译了吧(我记得ThinkPHP里面是预先把模版给编译成原生的PHP页面了)以上,个人观点,欢迎指正。
使用MVC,在View层我也觉得用原生的PHP代码比模板引擎更高效,这个跟项目的大小无关,PHP本身就是最优秀的模板语言。
这些模板系统是以前为了代码和样式分离遗留下来的。现在普遍都是 MVC 架构,所以基本没用了。PS:小系统也应该用 MVC,机器比人工便宜多了,开发效率最重要。
一般有这种疑问的多是代码量偏小的。分离是为了便于维护,牺牲部分开发效率用以便于日后维护也是很正常的事情吧。如果是你,你愿意维护一个PHP与HTML全部写在一起的乱糟糟的系统,还是愿意维护一个MVC三层分明的项目?学习不是什么大问题,大多数框架的上手速度都不慢。而且对于一般框架来说,他的首要解决的问题之一就是快速开发,开发效率不是问题。运行效率有损耗是正常的,因为mvc这种模式,本身就是一种牺牲效率提高稳定性的方案。
用ThinkPHP开发已三年!简单说一下感受(1)第一年:因为懒得学ThinkPHP内置模板引擎语法,就直接使用自己熟悉的Smarty;(2)第二年:因为平时收集的不少ThinkPHP源码,使用的是内置的ThinkPHP模板语法,没办法,就把内置的ThinkPHP引擎看了一遍,其实就是一二天事,基本上与Smarty没有太大的区别,做几个实例就掌握了;(3)第三年:有一次在做一个项目时,需要在模板中使用原生的PHP字符串函数做一个简单替换,结果突然发现,居然不会写了,要去查手册!
太可怕了,这在二年前简直不敢想象,以前闭眼都不会敲错。
所以,各类模板引擎,在方便程序员的同时,也使大家对原生的PHP语言变得陌生了。所以现在,拿到项目开工前,我会直接在Application下的公共配置文件中
'TMPL_ENGINE_TYPE'
// Think模板引擎使用原生PHP
'TMPL_TEMPLATE_SUFFIX'
// 默认模板文件后缀
一切回到最原始的状态!这个世界终于安静多了!模板的分层,剥离,加载,用一个include 语句就可以搞定!还有一点很现实,现在很多创业初期或规模较小的的网络公司,要求程序员都是多面手,前端后端恨不得你一个人全搞定,PHP写模板效率更高,没必要更加一层,增加学习成本!还是那句语:不忘初心!
代码和样式分离,当然,现在一种趋势是直接js了,php都不要
不懂,只知道我以前一个月开发的项目,现在两周或者一周搞定。
框架主要是为了我们这些民工服务,还是老老实实的写代码把,有本事自己也写个框架出来刷刷
已有帐号?
无法登录?
社交帐号登录ThinkPHP应用Smarty第三方插件法子小结
当前位置: >
> ThinkPHP应用Smarty第三方插件法子小结ThinkPHP应用Smarty第三方插件法子小结更新:&&&&编辑:妙玉&&&&来源:&&&&人气:加载中...&&&&字号:|标签:&&&&&&&&&&&&
本文实例讲述了的法子。给大家供大家参考,具体如下:
如果你在框架的时候不想采纳TP自带的模版系统,而应用的模版系统,你有很多其他的选择,在这里我仅介绍这种对比,而且对比强大的模版系统。
由于Smarty兼容PHP4,因此,它的效率会相对低一点点,这个低只是相对的,估计等Smarty啥时候正式放弃PHP4的时候,效率可能会上很大一个台阶。
在TP框架的PlugIns下面,有一个SmartTemplate,里面就是系统自带的Smarty。
应用法子如下:
1、在项目的Conf/Config.php文件里加上:
return array(
'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朋友解答的,为:?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法子,窜改代码如下:
static function getInstance() {
get_instance_of(__CLASS__,'init');
init ($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 );
public function
if(!empty(
return new
也就是让View类在实例化的时候,同时调用init法子。在这个法子里,我将我自己的模版插件放到了第三方插件的目录(Vendor)下。
切记切记:千万不可漏掉最后一句return $,其实这就是我所说的get_instance_of的BUG,如果不加这句,那么当type变量为PHP或THINK时,getInstance是无法返回实例的。
新的应用法子步骤如下:
1、改动项目的Conf/Config.php文件:
return array(
'THINK_PLUGIN_ON' =& true,
'TMPL_ENGINE_TYPE'=&'TpSmarty',
2、在TP的Vendor目录下面,创建TpSmarty.php,内容如下:
include_once(PLUGIN_PATH."smarty/Smarty.class.php");
TpSmarty extends Smarty {
__construct (){
parent::Smarty();
$this-&caching =
$this-&template_dir = TMPL_PATH;
$this-&compile_dir = CACHE_PATH ;
$this-&cache_dir = TEMP_PATH ;
public function
上面是最简单的写法,实际应用中,这些变量请改为与你自己的站点相配合。
3、根据上面的文件里的include_once函数,将smarty的libs目录拷贝至项目的PlugIns目录下,改名为:smarty(只需要与include_once中的目录相匹配即可)
4、然后,在项目的法子里就可以直接应用:
class IndexAction extends Action{
$this-&assign('test','testss');
$this-&display('default/index.html');
public function
只是,应用了插件后,display法子的参数是模版的全路径,而且不能留空(并非不能解决,只是要窜改的代码就会更多,目前这个法子是窜改最少的)。
一下,是否正常了?呵呵 。
现在,我们把Config里的模版引擎换回Think,同时在Tpl/default/目录下建立Index目录,里面放上index.html,并改动上面的index()法子,将原来的$this-&display('default/index.html');& 改为$this-&display();& ,,试一下,是不是也正常了?
更多thinkPHP相关内容感兴趣的读者可查看本站:《ThinkPHP入门教程》、《ThinkPHP常用法子》、《smarty模板入门根基教程》及《PHP模板技巧》。
愿望本文所述对大家基于ThinkPHP框架的PHP有所。
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
分类选择您可能在找这些帮设计师节省1,085,543,232小时内容互通,快速登录
只需一步,快速开始
还没有帐号? 赶紧
日志用户版块群组帖子
think php 到底是什么,和smarty有什么区别啊?
UID:28137
在线时间46小时
听了张老师讲的THINK PHP 听得有点糊涂。不知道到底有什么用呢?&&莫非就是自动生成一些文件夹方便管理?和SMARTY搞混了。头晕。有点笨,望各位高手能给个详细的解释,在此谢过,先!
评价一下你浏览此帖子的感受
张哥的粉丝
在线时间3168小时
.....先学好前面的,再来弄后面的,TP是一个框架。。。。
学习需要一种态度.一种坚持.加油 phper们
在线时间97小时
引用第1楼memory于 11:41发表的&&:.....先学好前面的,再来弄后面的,TP是一个框架。。。。
在线时间318小时
自己去官网看就知道了
UID:19639
在线时间96小时
thinkPHP 是框架 MVCsmarty&&&& 是模板 MC -& V不过框架更强大一点
UID:19051
在线时间117小时
引用第4楼10-04-24 12:50发表的&&:thinkPHP 是框架 MVCsmarty     是模板 MC -& V不过框架更强大一点....... 学习了..
UID:13613
在线时间1327小时
用户被禁言,该主题自动屏蔽!
UID:24945
在线时间52小时
回 6楼(huaihuajio) 的帖子
很有道理。。。
访问内容超出本站范围,不能确定是否安全
限100 字节
您目前还是游客,请
&回复后跳转到最后一页
Powered by & Copyright Time now is:08-30 13:07 &
版权所有 Gzip disabled

我要回帖

更多关于 smarty与thinkphp 的文章

 

随机推荐