【onethink排序】onethink thinkphp整合smarty模版引擎的笔记

更新时间:2019-12-08    来源:thinkphp    手机版     字体:

【www.bbyears.com--thinkphp】


最近用到thinkphp官方出版的onethink搭建管理后台,因为公司以前代码是smarty写的,模版2000多行,实在懒得用think的模版引擎来改,

所以整合smarty模版引擎, 兼容 think模版。

一:Application/Common/Conf/config.php添加

‘TMPL_ENGINE_TYPE’      => ‘Smarty’,

二:下载smarty模版引擎 下载地址

http://pan.baidu.com/s/1ntoXvwH

放在ThinkPHP\Library\Vendor下面

因为onethink已经有smarty类,在

ThinkPHP/Library/Think/Template/Driver/Smarty.class.php

public function fetch($templateFile,$var) {
$templateFile = substr($templateFile,strlen(THEME_PATH));
vendor("Smarty.Smarty#class");
$tpl = new \Smarty();
$tpl->caching = C("TMPL_CACHE_ON");
$tpl->template_dir = THEME_PATH;
$tpl->compile_dir = CACHE_PATH ;
$tpl->cache_dir = TEMP_PATH ;
if(C("TMPL_ENGINE_CONFIG")) {
$config = C("TMPL_ENGINE_CONFIG");
foreach ($config as $key=>$val){
$tpl->{$key} = $val;
}
}
$tpl->assign($var);
$tpl->display($templateFile);
}

而onethink模版解析流程是在

hinkPHP\Library\Behavior\ParseTemplateBehavior.class.php

public function run(&$_data){
$engine = strtolower(C("TMPL_ENGINE_TYPE"));
$_content = empty($_data["content"])?$_data["file"]:$_data["content"];
$_data["prefix"] = !empty($_data["prefix"])?$_data["prefix"]:C("TMPL_CACHE_PREFIX");
if("think"==$engine){ // 采用Think模板引擎
if((!empty($_data["content"]) && $this->checkContentCache($_data["content"],$_data["prefix"]))
|| $this->checkCache($_data["file"],$_data["prefix"])) { // 缓存有效
//载入模版缓存文件
Storage::load(C("CACHE_PATH").$_data["prefix"].md5($_content).C("TMPL_CACHFILE_SUFFIX"),$_data["var"]);
}else{
$tpl = Think::instance("Think\\Template");
// 编译并加载模板文件
$tpl->fetch($_content,$_data["var"],$_data["prefix"]);
}
}else{
// 调用第三方模板引擎解析和输出
if(strpos($engine,"\\")){
$class = $engine;
}else{
$class = "Think\\Template\\Driver\\".ucwords($engine);
}
if(class_exists($class)) {
$tpl = new $class;
$tpl->fetch($_content,$_data["var"]);
}else { // 类没有定义
E(L("_NOT_SUPPERT_").": " . $class);
}
}
}

可以看出如果模版引擎不是think时,则实例化

‘Think\\Template\\Driver\\’.ucwords($engine);

这样你的系统可以支持smarty模版了,

但是你其他的模版有的不想使用smarty ,还想保留think

则可以在config.php里加判断


if( strstr($_GET["s"],"NoSmarty")!=""){){
 
return array(
 
"TMPL_ENGINE_TYPE"      => "Smarty",
 
//当前控制器使用smarty
 
);
 
}else{
 
return array(
 
//当前控制器不使用smarty
 
);
 
}

本文来源:http://www.bbyears.com/jiaocheng/82695.html