|
模板機制 近期新項目涉及到ECshop的二次開發(fā),趁此良機正好可以對聞名已久的ECshop系統(tǒng)進行深入了解。要了解一個系統(tǒng),那么該系統(tǒng)的模板機制就是最重要的一環(huán)。相關(guān)整理如下: 一、模板引擎: ECshop給我的第一印象是用的smarty模板引擎,可是很快就發(fā)現(xiàn)有些不一樣,使用smarty模板引擎的系統(tǒng)通常會至少會包括smarty的核心文件:smarty.class.php、smarty_Compiler.php、config_File.class.php和debug.tpl,而在ECshop中并沒用發(fā)現(xiàn)smarty的核心類。還是通過程序?qū)ふ掖鸢赴?,在前臺或者后臺的公用文件init.php中$smarty對象的初始化中,可以看到加載的模板引擎文件是cls_template.php,原來ECshop團隊對smarty的核心部分做了整理及修改,這個引擎相對更加精簡,但是使用的時候可能需要注意,不是所有的smarty語法都可以在ECshop中使用,要使用還需修改模板引擎。 二、數(shù)據(jù)處理: ECshop根目錄下及admin目錄下的文件是對應(yīng)前臺、后臺頁面的數(shù)據(jù)處理頁,在這些文件中對頁面所要展示的內(nèi)容進行處理,之后通過smarty的assign()方法注冊變量,最后通過display()方法加載相應(yīng)的模板文件。但這里我們需要注意ECshop單獨封裝的幾個方法,用于處理模板的公共內(nèi)容及頁面中某些動態(tài)內(nèi)容的加載。如lib_main.php中的assign_template()會設(shè)置我們的網(wǎng)店的公共信息及網(wǎng)站設(shè)置;assign_dynamic()方法則是設(shè)置該頁面中的動態(tài)加載內(nèi)容。當(dāng)頁面所需的變量設(shè)置完成后,進入smarty的display()方法。 三、解析模板 首先,在ECshop中有.dwt和.lbi兩種格式的模板文件,那么這兩種文件之間是什么關(guān)系呢?可以這樣理解.dwt文件是針對前臺每個顯示頁面的模板“框架”,而.lbi模板中則是對頁面中公共“內(nèi)容”的整理,每個.lbi文件都是頁面中的一個模塊。二者是怎樣關(guān)聯(lián)到一起的呢?在模板文件夾中有一個libs.xml文件,這里則是具體配置每個模板“框架”中可以顯示哪些“內(nèi)容”(具體內(nèi)容之后談及模板管理會細(xì)說)。 下面查看解析模板的過程,在.dwt文件中根據(jù)框架的設(shè)計會劃分出幾個“可編輯區(qū)域”,.lbi模板正是加載到“可編輯區(qū)域”中進行輸出的。那么我們需要注意的是.dwt模板中的幾對標(biāo)簽: ①<!--TemplateBeginEditable name="右邊主區(qū)域"--><!-- TemplateEndEditable-->這對標(biāo)簽就是“可編輯區(qū)域”標(biāo)簽,在這對標(biāo)簽之間輸出的內(nèi)容是可以通過模板管理進行設(shè)置的。主要是選擇輸出不同的.lbi文件。 ②<!--#BeginLibraryItem "/library/page_header.lbi"--><!-- #EndLibraryItem-->這對標(biāo)簽則是對相應(yīng)的page_header.lbi文件的加載及輸出。這個頭部的模板每個頁面都需要加載,如果我們想更改模板中的頭部內(nèi)容,只要修改page_header.lbi即可,大大提高了效率。 模板文件加載完成之后,即可通過smarty引擎解析smarty標(biāo)簽,完成模板的輸出。
模板修改 經(jīng)常可以看到ecshop的dwt文件里面有“<!-- TemplateBeginEditable name="doctitle" -->和<!-- #BeginLibraryItem "/library/page_header.lbi" --><!-- #EndLibraryItem -->”這么一段代碼,有很多朋友誤認(rèn)為只是注釋代碼,這里首先來介紹一下#BeginLibraryItem這段代碼??梢钥吹胶竺嬗小皃age_header.lbi“這個.lbi文件是一個庫文件,打開后發(fā)現(xiàn)里面就是一些html代碼,index.dwt為模板,那么這個.lbi可以理解為模板index.dwt的子模板,.lbi專門供別的的dwt模板導(dǎo)入的子模板. 那么 TemplateBeginEditable這個又是干什么用的呢? 很多人知道這個是可編輯區(qū)域的意思,意思就是在TemplateBeginEditable 和 TemplateEndEditable之間的位置是可編輯區(qū)域,具體的我們來舉個例字。首先我們到ecshop 管理員后臺的模板管理->設(shè)置模板里面可以看到以下這個![]() 可以看到上面的默認(rèn)選擇了首頁模板,假如當(dāng)你將 商品分類樹 選擇為右邊主區(qū)域 點擊確定之后 清楚緩存,在刷新首頁這是你會發(fā)現(xiàn),原來的 商品分類樹 從左邊跑到右邊了。在上面的下拉框中我們看到只有三個選擇,右邊主區(qū)域,左邊主區(qū)域,廣告位,如果你想多加幾個選項,那么很簡單,只要你在你要改的模板內(nèi)多加上幾個就行了,假如你要在index.dwt模板添加 “左上角主區(qū)域”,和“右下角主區(qū)域”,那么你可以在index.dwt 里面加入 <!-- TemplateBeginEditable name="左上角主區(qū)域" --> <!-- TemplateBeginEditable name="右上角主區(qū)域" --> 這是你再到后臺,模板設(shè)置里面看首頁的選項中就有這個選項
下面我來講解一下怎么制作自己的模板, 我拿index.dwt為例, 首先在\themes\default\下將index.dwt文件拷貝一份改名為home.dwt在<body>里面加一句話 "這是自己定義的home.dwt模板" 以方便調(diào)試, 同樣在根目錄下的index.php文件拷貝一份改名為home.php里面加一行 echo '這是自己定義的home.php'; 代碼以便調(diào)試 同時把$smarty->display('index.dwt', $cache_id);改為$smarty->display('home.dwt', $cache_id);然后 清楚緩存 在瀏覽器通過http://localhost/ecshop/home.php執(zhí)行你會發(fā)現(xiàn)這個頁面跟首頁一樣,只是多了一段 "這是自己定義的home.php 這是自己定義的home.dwt模板" 文字。 當(dāng)然home.php 和home.dwt 文件里面的內(nèi)容可以自己定義. 接下來我們制作.lbi庫文件
這時候你再到 模板管理->設(shè)置模板->選擇Myhome模板 確定后,下面可以發(fā)現(xiàn)你要編輯的lbi出來了, 默認(rèn)是非可編輯區(qū)庫文件如果你要變?yōu)榭蛇x擇項那么你可以到\themes\default\libs.xml文件里找到剛才你加的 <file name="home.dwt"><region name="左邊區(qū)域">里面加上<lib>home</lib>你再回來看就可以了。記得要把后面對應(yīng)的顯示復(fù)選框勾選上,否則你保存不了你的選擇。 這時你再來訪問http://localhost/ecshop/home.php 你會發(fā)現(xiàn) "這是我自的lbi文件" 文字出來了。 另外需要補充一下的 遵循如下3步驟 到后臺模板設(shè)置,就可以調(diào)整此塊內(nèi)容居于左右位置了 |
|
|