結(jié)合設(shè)計(jì)經(jīng)驗(yàn)與營(yíng)銷(xiāo)實(shí)踐,提供有價(jià)值的互聯(lián)網(wǎng)資訊
發(fā)布日期:2017-06-17瀏覽次數(shù):1293 來(lái)源:福州網(wǎng)站建設(shè)
類(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é)果。
$smarty->display
$smarty->fetch 返回HTML結(jié)果(所有模板)
$smarty->fetch_str
1) $smarty->smarty_prefilter_preCompile (編譯成PHP)
【所以添加自定義標(biāo)簽、自定義表達(dá)式可以修改此處?!?/span>
【自定義函數(shù)在此處添加,注意自定義函數(shù)和自定 義標(biāo)簽的區(qū)別】
$smarty->_eval 替換成標(biāo)準(zhǔn)的PHP文件后通過(guò)eval來(lái)執(zhí)行結(jié)果。
2.
在dwt文件中,類(lèi)似<!-- #BeginLibraryItem "/library/xxx.lbi" --><!-- #EndLibraryItem -->這樣代碼中間的所有的代碼 被替換成一個(gè) {include file /library/xx.lbi}
3.
在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.
如上面所說(shuō),想增加自定義函數(shù)必須修改cls_template中的get_val方法(可以繼承),添加一些模板的自定義標(biāo)簽,需要修改cls_template 中的select方法,比如ECShop中自定義的insert、insert_script等函數(shù)就在此處。
以上是由福州網(wǎng)站建設(shè)的小編為你分享了"ECShop模板原理"文章,如果你在這方面有什么問(wèn)題,隨時(shí)聯(lián)系我們