先从smarty模板说起,众所周知如果用这个东东注册一个变量$smarty->assign($aaa,'123');
$smarty->display('a.tlp');
那么a页面就能使用$aaa这个变量呢,我想问的是。如果不用任何模板,我在a页面public一个变量,如何在b页面使用他?? 如果我用<?php $this->aaa;?>这样的方式,是否效率更高? 毕竟模板引擎也是用自己的语言逻辑实现这个过程。。
本人水平不高,想搞清楚这一点,求赐教
$smarty->display('a.tlp');
那么a页面就能使用$aaa这个变量呢,我想问的是。如果不用任何模板,我在a页面public一个变量,如何在b页面使用他?? 如果我用<?php $this->aaa;?>这样的方式,是否效率更高? 毕竟模板引擎也是用自己的语言逻辑实现这个过程。。
本人水平不高,想搞清楚这一点,求赐教
$smarty->display('a.tlp');等价于
$a = 234;
?>
...
<?php echo $a ?>
1.继承a类型
直接使用
2.创建a类对象
$a = new a();
$a->a;
a.php
<?php
$a = 124;b.php
<?php
include 'a.php';
?>
<p><?php echo $a ?></p>smarty与所有编译型模板引擎一样,都是在帮助你书写php+html的混合代码程序
混合代码程序才是运行效率最高的
通用範本處理引擎
參數:
調用範本並重組預定義的範本變量$Arr,讓每個key成為一個範本變量(key如果是數字將會被unset)
說明:
範本檔案名(多個名稱用*分隔),範本變量,是否直接輸出內容,範本路徑
不直接返回的狀況主要用於返回編譯之後的範本內容,其目的是爲了緩存
返回:
如果直接顯示則沒有任何返回值,如果不直接顯示則返回編譯後的範本
用法:
//自定義範本變體:範本里調用時可用的變量為:$a;$b
$out=Array('a'=>'abc',1=>'fff','b'=>Array('ee'=>'我','是')); //把前臺的兩個範本編譯之後直接輸出
T('head*index',$out); //把前臺的範本編譯之後直接輸出
T('test',$out,False); //把後臺範本編譯之後返回給調用對象
T('test',$out,True,'adm');
/**/
Function T($Tpl,&$Arr=Array(),$IsShow=True,$Dir='usr') {
IF($Tpl=='') {Return ;} Foreach($Arr as $k=>$v) {
IF(Is_numeric($k)) {
Unset($Arr[$k]);
IF(SYS_DEBUG) {Error('FT0001',False);}
Continue;
}
$$k=$v;
}Unset($Arr); IF(!$IsShow) {//如果不允許直接輸出,則開啟緩衝抓取內容
OB_start();OB_clean();
} $Tpl=Str2Arr($Tpl,'*',True,True,False);
Foreach($Tpl as $k=>$v){
//範本檔案及路徑
$FTpl=SYS_ROOT.$GLOBALS['SYS_TPL'.StrToUpper($Dir).''].$v.'.php'; //範本是否存在
IF(!File_Exists($FTpl)) {Exit('Error:Template '.$FTpl);} //載入範本
Require($FTpl);
Unset($FTpl);
}Unset($Tpl,$Dir); IF(!$IsShow) {
$m=Ob_get_contents(); // 取得緩存區內容
OB_end_clean(); // 清理原有內容OB_clean();
OB_end_flush();
Unset($IsShow);
Return $m;
}
}
其實我現在的做法和你的想法是完全一樣的
我的做法是把不常常更新的內容用樓上的函數處理并返回結果,把結果緩存到memcache,下次顯示的時候直接从memcache里取出来然后echo輸出,而常常更新的內容則用上邊的函數處理變量,在模板里嵌套<?php ?>代碼塊.
我曾在linux上做過一個比較全面的壓力測試,發現在同時并发数达到10000的情况下,速度还是非常快.所以一直以来我一直沿用此方式,而没有使用smarty.
foreach($this->assigns as $key => $value) {
$$key = $value;
}
include('template.tpl');
主要做的就是将变量注册到smarty自己的数组里面
在display(".tpl")的时候将模板标签用正则替换成php的服务器标签,include那个页面之后就能使用你注册的变量了
如果每次访问都是需要这样的执行步骤的话用模板确实没有直接用服务器标签来的快
但是smarty中有完备的缓存机制,他第二次访问就会直接访问你第一次访问编译后的php标签的页面,即有混合代码的文件,效率已经和纯Php无差了,而且长还可以开启caching缓存功能直接生成html代码的页面,这样的统一调度下效率更快,而且模板机制 数据和逻辑分离,换ui也很简单
所以 我觉得模板还是很不错的