ecshop模板的原理分析
模板的原理
類似Smarty/ECShop這類模板的原理如下圖所示。
1.首先是編譯模板
ECShop/Smart是利用PHP引擎,所以編譯的結(jié)果是一個(gè)PHP文件,其編譯過(guò)程就是
將分隔符{}替換成PHP的標(biāo)準(zhǔn)分隔符<?PHP ?>,
將$var替換成 echo $var; 或者print $var;
將其他的比如foreach和if等也替換成標(biāo)準(zhǔn)的PHP語(yǔ)法。
將{include file…}之類的則替換成標(biāo)準(zhǔn)的PHP的inlcude …
其余都是等效替換。
2.其次是生成編譯結(jié)果
編譯結(jié)果是PHP文件,并且編譯結(jié)果可以重用,所以這種文件會(huì)存到臨時(shí)緩存目錄里面。
3.利用PHP引擎執(zhí)行結(jié)果
輸出HTML結(jié)果。
?
ECShop模板的原理
ECShop的模板原理和上面基本類似,就是在編譯的時(shí)候和Smarty模板有所修改,比較重要的有一下幾點(diǎn):1. 模板的執(zhí)行流程
$smarty->display
$smarty->fetch?返回HTML結(jié)果(所有模板)
$smarty->fetch_str??(先編譯成PHP、在給變量賦值、計(jì)算結(jié)果)
1) $smarty->smarty_prefilter_preCompile (編譯成PHP)
?? 2) $smarty->select (計(jì) 算每一個(gè)變量、表達(dá)式的結(jié)果,替換成標(biāo)準(zhǔn)PHP語(yǔ)法)
??? 這一步是通過(guò)正則實(shí)現(xiàn)的,匹配每一個(gè){},將結(jié)果傳給 $smarty->select,改方法通過(guò)switch/case逐一分析,替換成對(duì)應(yīng)的表達(dá)式。
【所以添加自定義標(biāo)簽、自定義表達(dá)式可以修改此處。】
?? 3) $smarty->get_para $smarty->select通過(guò)調(diào)用get_para來(lái)實(shí)現(xiàn)獲取具體變量的值。
?? 4) $smarty->get_val 而$smarty->get_para通過(guò)get_val來(lái)計(jì)算最終變量的值。
【自定義函數(shù)在此處添加,注意自定義函數(shù)和自定 義標(biāo)簽的區(qū)別】
$smarty->_eval?替換成標(biāo)準(zhǔn)的PHP文件后通過(guò)eval來(lái)執(zhí)行結(jié)果。
?
2.?????? Lbi文件替換
在dwt文件中,類似<!-- #BeginLibraryItem "/library/xxx.lbi" --><!-- #EndLibraryItem -->這樣代碼中間的所有的代碼 被替換成一個(gè) {include file /library/xx.lbi}
3.?????? Editable的region替換
在dwt文件中,類似
<!-- TemplateBeginEditable name="左邊區(qū)域" --><!-- TemplateEndEditable -->中間的內(nèi)容,都被 動(dòng)態(tài)替換。
替換原理
首先是get_dyna_libs($theme, $tmp)函數(shù)得到當(dāng)前theme下$tmp文件的所有動(dòng)態(tài)區(qū)域,該函數(shù)讀取數(shù)據(jù)庫(kù)中的記錄,按照后臺(tái)設(shè)置的順序排序。
返回的每個(gè)區(qū)塊有三個(gè)參數(shù),ID、Number、Type。
ID是標(biāo)識(shí),Number表示插入的個(gè)數(shù),Type有1、2、3、4,分別代表:分類的商品、品牌的商品、文章列表、廣告位。
然后把每個(gè)<!-- TemplateBeginEditable name="區(qū)域名稱" --><!-- TemplateEndEditable -->里面的內(nèi)容全部替換。
4.?????? 自定義函數(shù)等
如上面所說(shuō),想增加自定義函數(shù)必須修改cls_template中的get_val方法(可以繼承),添加一些模板的自定義標(biāo)簽,需要修改cls_template 中的select方法,比如ECShop中自定義的insert、insert_script等函數(shù)就在此處。
總結(jié)
以上是生活随笔為你收集整理的ecshop模板的原理分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 小尾巴在摇摇是什么歌啊
- 下一篇: PHP数组实际占用内存大小的分析