結合設計經驗與營銷實踐,提供有價值的互聯網資訊
發布日期:2017-06-17瀏覽次數:1193 來源:福州網站建設
類似Smarty/ECShop這類模板的原理如下圖所示。
1.首先是編譯模板
ECShop/Smart是利用PHP引擎,所以編譯的結果是一個php文件,其編譯過程就是
將分隔符{}替換成PHP的標準分隔符<?PHP ?>,
將$var替換成 echo $var; 或者print $var;
將其他的比如foreach和if等也替換成標準的PHP語法。
將{include file…}之類的則替換成標準的PHP的inlcude …
其余都是等效替換。
2.其次是生成編譯結果
編譯結果是PHP文件,并且編譯結果可以重用,所以這種文件會存到臨時緩存目錄里面。
3.利用PHP引擎執行結果
輸出HTML結果。
$smarty->display
$smarty->fetch 返回HTML結果(所有模板)
$smarty->fetch_str
1) $smarty->smarty_prefilter_preCompile (編譯成PHP)
【所以添加自定義標簽、自定義表達式可以修改此處。】
【自定義函數在此處添加,注意自定義函數和自定 義標簽的區別】
$smarty->_eval 替換成標準的PHP文件后通過eval來執行結果。
2.
在dwt文件中,類似<!-- #BeginLibraryItem "/library/xxx.lbi" --><!-- #EndLibraryItem -->這樣代碼中間的所有的代碼 被替換成一個 {include file /library/xx.lbi}
3.
在dwt文件中,類似
<!-- TemplateBeginEditable name="左邊區域" --><!-- TemplateEndEditable -->中間的內容,都被 動態替換。
替換原理
首先是get_dyna_libs($theme, $tmp)函數得到當前theme下$tmp文件的所有動態區域,該函數讀取數據庫中的記錄,按照后臺設置的順序排序。
返回的每個區塊有三個參數,ID、Number、Type。
ID是標識,Number表示插入的個數,Type有1、2、3、4,分別代表:分類的商品、品牌的商品、文章列表、廣告位。
然后把每個<!-- TemplateBeginEditable name="區域名稱" --><!-- TemplateEndEditable -->里面的內容全部替換。
4.
如上面所說,想增加自定義函數必須修改cls_template中的get_val方法(可以繼承),添加一些模板的自定義標簽,需要修改cls_template 中的select方法,比如ECShop中自定義的insert、insert_script等函數就在此處。
以上是由福州網站建設的小編為你分享了"ECShop模板原理"文章,如果你在這方面有什么問題,隨時聯系我們