福州網站建設>網站新聞>php技術

        ECShop模板原理

        發布日期: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結果。

         

        ECShop模板的原理

        ECShop的模板原理和上面基本類似,就是在編譯的時候和Smarty模板有所修改,比較重要的有一下幾點:

        1. 模板的執行流程

        $smarty->display

        $smarty->fetch 返回HTML結果(所有模板)

        $smarty->fetch_str  (先編譯成PHP、在給變量賦值、計算結果)
        1) $smarty->smarty_prefilter_preCompile (編譯成PHP)

           2) $smarty->select (計 算每一個變量、表達式的結果,替換成標準PHP語法)
            這一步是通過正則實現的,匹配每一個{},將結果傳給 $smarty->select,改方法通過switch/case逐一分析,替換成對應的表達式。
        【所以添加自定義標簽、自定義表達式可以修改此處。】

           3) $smarty->get_para $smarty->select通過調用get_para來實現獲取具體變量的值。

           4) $smarty->get_val 而$smarty->get_para通過get_val來計算最終變量的值。
        【自定義函數在此處添加,注意自定義函數和自定 義標簽的區別】

        $smarty->_eval 替換成標準的PHP文件后通過eval來執行結果。

         

        2.       Lbi文件替換
        在dwt文件中,類似<!-- #BeginLibraryItem "/library/xxx.lbi" --><!-- #EndLibraryItem -->這樣代碼中間的所有的代碼 被替換成一個 {include file /library/xx.lbi}

        3.       Editable的region替換
        在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中自定義的insertinsert_script等函數就在此處。

        以上是由福州網站建設的小編為你分享了"ECShop模板原理"文章,如果你在這方面有什么問題,隨時聯系我們

        php技術有關的文章
        如果您有什么問題,歡迎咨詢我們客服! 點擊QQ咨詢