电竞比分网-中国电竞赛事及体育赛事平台

分享

ECshop模板機制整理

 quasiceo 2014-05-04

模板機制

近期新項目涉及到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ū)域" -->
<!-- TemplateEndEditable -->

<!-- TemplateBeginEditable name="右上角主區(qū)域" -->
<!-- TemplateEndEditable -->

這是你再到后臺,模板設(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)容可以自己定義.
當(dāng)你再到后臺模板管理->設(shè)置模板 里面的 選擇模板下拉框選項中沒有你加的home模板,這時你就要在\admin\includes\lib_template.php里配置一下。在代碼”$template_files = array('index.dwt', “ 加上你的模板”$template_files = array('home.dwt','index.dwt',“ ,告訴系統(tǒng)有home.dwt這么一個模板,其次在$page_libs = array( 這個二位數(shù)組里面的 'index' => array( 這個數(shù)組拷貝一份,改名為home ,意思就是告訴系統(tǒng)你這個home模板里面可以導(dǎo)入哪些.lbi文件.這點配置還不夠,你還要在\languages\zh_cn\admin/template.php語言包里面加一行$_LANG['template_files']['home'] = 'Myhome模板';代碼.然后你再到后臺模板管理->設(shè)置模板可以看到如下結(jié)果
  
你會發(fā)現(xiàn)下拉框中多了一個Myhome模板選項,當(dāng)你點擊旁邊的確定按鈕時會報錯,這是因為你還有一個xml文件沒修改,打開themes\default\libs.xml文件,將 <file name="index.dwt"> 節(jié)點內(nèi)的代碼拷貝一份把節(jié)點名改為<file name="home.dwt">這時你再來重復(fù)上次的操作點擊旁邊的確定,就不會報錯了。

接下來我們制作.lbi庫文件
首先我們在\themes\default\library\目錄下新建一個home.lbi文件 里面輸入"這是我自的lbi文件"然后在\admin\includes\lib_template.php文件里面,你剛才新加的'home' => array(home數(shù)組里面 添加你的home.lbi 既在這個數(shù)組末尾加'/library/home.lbi' => 0 同樣像修改模板一樣在\languages\zh_cn\admin\template.php 里面加入一行 $_LANG['template_libs']['home'] = 'Myhome庫文件'; 代碼 這時你到后臺 模板管理->庫項目管理 你就會發(fā)現(xiàn)剛剛你加的庫文件出來了。


里面代碼可以自己修改

這時候你再到 模板管理->設(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步驟
     1 在library 里面新建 lbi 文件,比如 phpsir.lbi , 請設(shè)置 777,到后臺庫項目里面就能看到和可以編輯 phpsir.lbi
     2 修改 admin/includes/lib_template.php 里面的 $page_libs 變量
     3 在 libs.xml 里面找對應(yīng)模板dwt文件,里面寫入 <lib>phpsir</lib>

到后臺模板設(shè)置,就可以調(diào)整此塊內(nèi)容居于左右位置了

 

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章