小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

ecshop模板的原理分析

 syden1981 2014-11-30

模板的原理

類(lèi)似Smarty/ECShop這類(lèi)模板的原理如下圖所示。


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…}之類(lèi)的則替換成標(biāo)準(zhǔn)的PHP的inlcude …
其余都是等效替換。

2.其次是生成編譯結(jié)果

編譯結(jié)果是PHP文件,并且編譯結(jié)果可以重用,所以這種文件會(huì)存到臨時(shí)緩存目錄里面。

3.利用PHP引擎執(zhí)行結(jié)果

輸出HTML結(jié)果。

 

ECShop模板的原理

ECShop的模板原理和上面基本類(lèi)似,就是在編譯的時(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á)式可以修改此處?!?br>

   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文件中,類(lèi)似<!-- #BeginLibraryItem "/library/xxx.lbi" --><!-- #EndLibraryItem -->這樣代碼中間的所有的代碼 被替換成一個(gè) {include file /library/xx.lbi}

3.       Editable的region替換
在dwt文件中,類(lèi)似
<!-- 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,分別代表:分類(lèi)的商品、品牌的商品、文章列表、廣告位。

然后把每個(gè)<!-- TemplateBeginEditable name="區(qū)域名稱(chēng)" --><!-- TemplateEndEditable -->里面的內(nèi)容全部替換。

4.       自定義函數(shù)等
如上面所說(shuō),想增加自定義函數(shù)必須修改cls_template中的get_val方法(可以繼承),添加一些模板的自定義標(biāo)簽,需要修改cls_template 中的select方法,比如ECShop中自定義的insert、insert_script等函數(shù)就在此處。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多