.2008/08/10:目前部落格的網址已經轉換為MrMo.cc再麻煩大家修正!

[Lifetype] 一個Lifetype樣板(Template)的繼承架構

TemplateExtend

Lifetype系統裡面,有提供了共用的樣板,讓使用者可以自行選擇樣板來使用,而也有提供使用者自行上傳樣板的功能,當使用者需要為自己客製化使用樣板的時候,就可以由系統共用樣板中複製一份,然後在自行修改為自己所需要的客製化樣板。

但是當有多個使用者客製化使用同一份公用樣板,又遇上了公用樣板有結構上的修改,需要在所有使用此份樣板的部落格都套用上修改時,那就會變成一件非常麻煩的事情,系統管理者必須要去尋訪所有有用這份公用樣板的部落格,並且依依進行修改,其實很不符合經濟效益。

剛好,最近在AZhu Blog System上面也遇到了類似的問題,大家可以發現,目前在系統上面由不務正業紀實(mouson)、資訊筆記(mousontech)、奧斯汀(austin)等三個部落格所組成,而三個部落格其實都是使用Nonzero這一個樣板,只是在細部上的一些細節不太相同,整體架構上其實還是使用同一份樣板的,在從前如果CSS上面有些微的變動,在管理樣板時,就必須要尋訪這三個樣板,然後一一做修改,其實就變成相當的繁瑣,而且不符合在利用的精神。

那如果在Lifetype系統上面也可以有類似樣板繼承的架構,讓使用者依然保有細節自行微調的功能,但是像是CSS、大結構、img等可以共用的資源依然還是歸系統管理,那應該就可以解決目前的問題。

當然,在這邊會提出這樣的需求,其實就代表著mouson我有找到一些解決方案,雖然說還不是非常的完成,但是是一個已經在我的系統上面使用的方案,在這邊提出來給大家做參考。

要達到上述的功能,我們必需要可以做到幾件事情:

1. 公用的樣板必須擺在所有的使用者都可以存取到的地方。
2. 公用樣板中,必需要可以設定某些地方可以讓使用者自行修改。
3. 對於使用者而言,這個公用樣板還是可以像自己的樣板一樣,透過樣板編輯器修改想修改的地方。

這樣的想法其實就好像物件導向程式(OOP)裡面所提到的繼承,公用樣板的部份就像是Base Class,而讓使用者可以修改的地方就像是Base-Class裡面所訂立的Interface,因此只要是繼承這一個Class的Derived Class,就必須去實作(Implement) Base-Class所制定的Interface。

那在Lifetype的樣板系統上面我們要怎麼實作呢?(以下以我這一次實作的nonzero template為例)

1. 公用的樣板必須擺在所有的使用者都可以存取到的地方

在目前的Lifetype樣板系統裡面,其實就已經有兩個可以公用存取的地方,一個是template資料夾裡面的「default」資料夾,另外一個也是在template資料夾裡的「misc」資料夾,兩者個差異在於misc資料夾可以在各個樣板中透過$misctemplatepath這一個變數當作樣板的路徑去做直接存取,而default資料夾裡面擺得template,則是在所設定的路徑裡面找不到該.template時,就會去詢問default資料夾裡面有沒有這一個template

因此我們就透過這一個原則,在misc資料夾裡面,新增一個叫做nzr_comm的資料夾,專門擺放nonzero template可以公用的*.template,而在使用者的自己修改資料夾之中,只需要將九個一定要存在的樣板裡面(請參考模版如何運作?),分別針對各個樣板,用$misctemplatepath的變數指向公用樣板的路徑,就可以達到使用者樣板去使用系統所建立的公用樣板的目的了!

2. 公用樣板中,必須要可以設定某些地方可以讓使用者自行修改

就如同上面所說的,在Base Class裡面,要在建立可以由Derived Class繼承並且實作的介面,因此必須在公用的Template裡面設定可以由使用者客製化的介面。

在目前的Template系統裡面,如果有需要共用的或重複性很高的Template,像是header、footer,那通常會把這些地方的程式碼獨立出來,變成一個template檔,然後在需要使用到他們的地方以{include file="XXXX.template"}的語法來Include他們,而這樣的作法,可以將他們轉移到目前所提出的這個概念。

前面有提到,當樣板中要使用misc資料夾裡面的template時,可以透過$misctemplatepaht變數指定路徑到/template/misc資料夾,而在Lifetype系統裡面,如果需要將路徑指定到目前使用的這個樣板路徑,則使用$blogtemplate的這個變數,而在Lifetype系統裡面,如果在misc裡面的template資料夾使用$blogtemplate變數的話,其變數指到的路徑依然會是使用者目前的template資料夾,而不是misc的這個資料夾

透過上面所提到的include概念及存取目前blogtemplate的語法結合,如果在公用樣板裡面,如果有需要使用者自己去設定樣板,那就在那個地方使用{include file="$blogtemplate/XXXX.template"}的語法,而使用者只需要針對系統設定需要由使用者修改的做修改,那就可以達到客製化的目的了!

插入公用樣板中需要實作的圖

3. 對於使用者而言,這個公用樣板還是可以像自己的樣板一樣,透過樣板編輯器修改想修改的地方

由於上面所提到的兩點,因此對於使用者而言,所看到的依然還是如從前的樣板一樣,可以透過Lifetype管理介面的樣板管理做新增刪除,並且透過樣板編輯器PlugIn做樣板的修改及客製化,所以對於使用者的使用習慣上,是沒有太大的轉變的,只需要針對系統設定需要自行修改的地方,為自己做客製化,就可以達到所有使用者依然共用同一份基本樣板,且使用者可以針對自己的使用狀況去做客製化,如此不但可以避免掉系統中有太多重複的樣板內容,也依然滿足使用者客製化樣板的需求。

4. 實作有這樣功能的樣板
4.1. 建立共用樣板

在我所使用的nonzero樣板裡面,針對樣板所需的幾個template做實作,並且在樣板裡面需要由使用者自己實作的地方用{include file="$blogtemplate/XXX.template"},那就可以達到共用樣板又可以讓使用這客製化的目的。

LifetypeTemplateExtend_01

LifetypeTemplateExtend_02

4.2. 建立使用者繼承的樣板

在使用這個樣板中,我只需要建立一個新的使用者樣板,並且針對公用樣板中需要繼承的template建立引用公用樣板的樣板。

LifetypeTemplateExtend_03

在這邊,由於我將公用的使用者樣板擺在misc資料夾裡面的nzr_comm資料夾裡面,所以在include的路徑裡面又多了一個nzr_comm的資料夾名稱。

LifetypeTemplateExtend_05

4.3. 修改需要自行修改的地方

在建立玩公用樣板,以及使用者建立繼承的樣板之後,使用者只需要在針對需要自己客製化的樣板做修改及實作,並且套用此樣板,就可以達到繼承公用樣板的目的了!

LifetypeTemplateExtend_04

目前尚未做到的地方

1. 目前系統尚無法跟使用者主動告知,目前有哪些樣板可以如此繼承,因此一定需要透過系統公告的方式,給使用者教學,如此的作法是不太人性化的,所以如果可以在系統裡面加上可繼承的樣板列表,那就更好了!

2. 由於將公用的樣板擺放在misc資料夾,而這個資料夾本來就是在擺放預設樣板的地方,所以在系統管理介面裡面是沒有一個可以直接存取編輯misc樣板的介面的,因此目前如果需要修改公用樣板的部份,就必需要透過本地修改在上傳到系統(主機 or Hosting),或進系統內直接修改;如果可以稍做一些修改使系統管理者,也可以透過網頁介面直接做公用樣板修改的話,那這個Template樣板的繼承架構想法就更加的完整了!

相關閱讀:

1. Lifetype 中文Wiki - 模版如何運作?
2. Lifetype 中文Wiki - 模版與 LifeType 物件


相關文章:
[Lifetype] 在每個Post的HTML Title加入文章標題
無名樣式的Template
在LifeType1.2的Summary頁面中,以最新發表的文章呈現最多迴響的文章
在每篇文章加入閱讀人數
於Template中加入文章統計

« 上一篇 [軟體使用] AWStats 分析您的Log檔
» 下一篇 [軟體使用] 全免費的DNS Hosting 選擇

隨機文章

Powered by Stuff-a-Blog

分享

引用網址  

迴響

Re:

這也是個方式。

如果要這樣做,應該把 那些可供 override 的樣版都改名,改為 .tpl ...

然後在 template editor 下,將可修改的 extension 設定為 *.css 與 *.tpl

這樣子使用者就可以只修改他看的到的 .tpl 模版了。

另外,要讓使用者知道哪些模版可以這樣做 .... 從模版命名的方式下去著手 ...

並且修改模版的 screen shots ..

這樣使用者就知道哪些模版可以這樣改。

Re:

Mark:

我自己目前是使用需要override的樣板名稱前面都加上'_'做分辨,
目前這一個想法還有一些細節還需要再討論。
包含您所說的樣板名稱的命名,
及讓使用者方便的知道哪些是需要override的樣板等等....

也許可以慢慢的修改,讓這個想法變成更加可行的樣板使用方案!

Re:

你好,我在

http://forum.lifetype.org.tw/index.php?topic=4380.0

这里给你回复过

麻烦去看看

Re:

我已經在lifetype的forum上回應您囉!
希望可以幫上您的忙

請問隨機檔案

您好

請教一個問題,我看了些有關smarty的文章想尋找可以隨機載入目錄下的文件

我目前是用{include file="xxx.tpl"} 的方式

但如果我希望能夠把xxx改成隨機的方式 請問大大有解決的方式嗎

感謝~

Re:

beagle,

不好意思,我對於smarty不熟,但稍微google後發現,他理論上是可以的!

你可以搜尋 「smarty include 動態 」

我有看到,這可能就是你要的答案了吧!

<?php 
$smarty   = new Smarty();
$html_dir ="default";
$tpl_dir    ="tpl";
$smarty->assign("html_dir",$html_dir);
$smarty->assign("tpl_dir",$tpl_dir);
$smarty->display("test.tpl");
?>

test.tpl
{include file=$tpl_dir."/".$html_dir."/main_top.htm" title=foo}

站內搜尋

近期文章

[iPhone App] 不用怕睡過頭的好軟體GPS Alarm
[iPhone App] 我常用的免費iPhone App列表
[Office] 如何在Excel列印時重複標題欄、標題列
[Office] 在Word文件建立表格重複標題列
[LifeType] WordPress To Lifetype
[軟體使用] 製作明信片地圖google maps的方法
[網站推薦] 所見影片即所作的投影片分享網站slideboom
[軟體推薦] 免費燒錄的好幫手CDBurnerXP
[軟體使用] 全免費的DNS Hosting 設定筆記
[軟體使用] 全免費的DNS Hosting 選擇

最近回應

Re: [軟體推薦] 有問必達-阿達機器人, by 我就是火砲啦 (10/19)
Re: [網站推薦] 所見影片即所作的投影片分享網站slideboom, by mouson (05/02)
Re: [網站推薦] 所見影片即所作的投影片分享網站slideboom, by Pseric (04/30)
Re: [網站推薦] 分享你的簡報檔_SlideShare, by 窈窕大媽 (03/17)
Re: [軟體推薦] 方便切換網路設定的 Net Profiles, by cheng0217 (03/05)
Re: [軟體推薦] 免費燒錄的好幫手CDBurnerXP, by u882061 (01/30)
Re: [Lifetype] 一個Lifetype樣板(Template)的繼承架構, by mouson (12/07)
Re: [Lifetype] 一個Lifetype樣板(Template)的繼承架構, by beagle (12/07)
Re: [軟體使用] 全免費的DNS Hosting 設定筆記, by mouson (11/10)
Re: [軟體使用] 全免費的DNS Hosting 設定筆記, by gu (11/10)

文章分類

軟體使用 [8]
iPhone [2]
軟體推薦 [13]
網站推薦 [7]
作業系統 [1]
系統設定 [1]
LifeType [13]
程式語言 [8]
硬體相關 [2]
一般 [2]
PPC使用 [1]
IT資訊 [1]

文章彙整

感謝支持《MIS 救難手冊》

工商服務

我的連結

一般
墨嗓的精選文章
墨嗓的不務正業紀實

聯絡我

訂閱本站

版權聲明

About Me

mousontech

mouson,墨嗓,72年次,北市忠孝東路上的知名科大,資工所畢業生,但由於不務正業個性使然,舉凡資訊、財經、行銷、管理、網路、單車等各方面的知識都有些興趣。 更多關於我請見這裡

留言版


工商服務

用 BloggerAds 替公益盡心力

熱門文章

[網路相關] 免費網路流量監控軟體 NetMeter [16528]
何謂callback function? [16133]
[軟體使用] AWStats 分析您的Log檔 [14962]
[軟體使用] 全免費的DNS Hosting 選擇 [14071]
[軟體使用] 全免費的DNS Hosting 設定筆記 [14014]
無名樣式的Template [12668]
[Lifetype] 一個Lifetype樣板(Template)的繼承架構 [12615]
[Lifetype] 解決Live Writer無法更新類別問題 [11059]
[Lifetype] 在Lifetype平台使用Windows Live Writer [10967]
[軟體使用] 製作明信片地圖google maps的方法 [10354]

誰看過我們

統計資料