Movable Type 模版


MOVABLE TYPE 模版

模版和標籤哲學

在 Movable Type 的模版標籤背後,有兩個主要的概念:

這兩點都會在後面詳加描述。對於其他出版管理系統的使用者、也就是那些更熟悉其他模版標籤的人來說,這裡有一些內部模型差異的注意事項:

為什麼 Movable Type 用了現在出現於模版裡的內部模型呢?有兩個原因:

  1. 最主要的原因是靈活度的考量。妳可以用 <MTEntries> 標籤來表示妳任何文章項目的清單,並且可以透過各種不同的手段,把這份清單變成任何妳想要的樣子。跟 Greymatter 的方法比較一下,後者的 {{logbody}} 標籤總是被完全相同的組成元件所定義樣式的文章項目清單所取代:這些組成元件是兩個 Index Entry Templates 模版的其中一個。

  2. 妳可以少盯一些模版,而且可以在一個模版裡就組出整個頁面的板面安排。 Greymatter 的方法通常會把一個頁面拆成許多小片段,每一個小片段都是一個模版。在 Movable Type 的模版系統中,所有的組成元件都放在同一個地方,並且透過容器標籤來決定是否要囊括或重複。

(請注意上面這一段並不是在指責 Greymatter 的不是,我們祇不過是要試著描繪出兩者的不同,並解釋為什麼我們選擇了現在所用的這一套。)

標籤種類

Movable Type 模版是由許多特別的標籤,並嵌入標準的文字(或 HTML 在此也有可能)的片段。這一些標籤的集合可以分成兩群 -- 容器和變數:

標籤語法

所有的 Movable Type 標籤都被包在小於和大於符號之間,就跟 HTML 標籤一樣。妳可以選擇在這些標誌裡插入 $ ,就像這樣:

<$MTEntryBody$>

透過這個技巧,妳就能夠迅速地判斷某個標籤到底是 HTML 標籤還是 Movable Type 標籤。

這個 $ 是選用性的;慣例上所有的預設模版和文件裡都會把變數標籤加上 $ ,但是並不會加進容器標籤裡。一部份的原因是因為妳該在容器標籤的結尾標籤裡用這個 $ ,否則系統就會找不到結尾標籤。

標籤屬性

有些 Movable Type 標籤會透過屬性來修改他們的預設作用。標籤屬性的作用就跟 HTML 標籤的屬性很像:他們是一連串的 name="value" 配對,以空白隔開。舉例來說:

<MTEntries author="Foo" category="Bar">

(要知道這裡到底發生了些甚麼事,請翻閱 <MTEntries> 文件。)

屬性的值必須被包在引號中;否則就無法被正確地解讀。當妳在標籤中加入 $ 時,必須把這個字符放在標籤的開始之後、結束之前;然後當妳要在這樣的標籤中加入標籤屬性時,妳得把這些屬性放在標籤結尾的 $ 字符之前。舉例來說:

<$MTEntryDate format="%B %e, %Y"$>

被各個 Movable Type 標籤所支援的屬性,會跟著這些標籤被列出。

情境的重要性

大部分的 Movable Type 標籤都是仰賴情境的,這表示這些標籤祇應該在適當的情境中被使用。

情境通常都是由附近的模版或者是附近的容器標籤所決定的:舉例來說,模版組成元件若被放在 <MTEntries> 標籤裡、在單篇彙整頁面裡、在評論清單模版裡或者在評論預覽模版裡的時候,就是在文章項目情境裡。因為這樣,所以在這些情境中使用 <$MTEntryTitle$> 標籤或 <MTComments> 容器時纔有意義。

技術資訊

以下這些技術資訊說明了模版如何被解讀後再建造成輸出頁面。

第一步是把進來的模版拆成若干零件,每一個零件都是一個標籤(像是 <$MTEntryText$><MTEntries> 之類的)或可以被直接插入的原始文字區塊。有些標籤是容器,像是 <MTEntries> -- 這些標籤一定要包含開啟標籤和關閉標籤,然後介於其間的組成元件也一樣被拆解成若干零件,再儲存於容器之下。

第二步是取得這些零件以及文章項目、文章項目清單、評論、評論清單之類的 -- 基本上就是某種內容 -- 然後再建造出最後輸出的頁面。一般說來這個最後的頁面會是 HTML ,不過顯然系統本身並沒有這樣的限制(別忘了, RSS 串聯模版早就裝進來啦)。

標籤自己本身並沒有寫死在分析程式(把文字編譯成零件的物件)裡;每一次分析程式找到一個標籤後,它就會內容物件有關標籤的類別為何、是否是個容器之類的。然後這個標籤就會增加到零件清單裡。

同樣地這些標籤也不是寫死在用來建造最後輸出的物件(其本質是轉譯程式)裡。這個物件也會跟內容物件溝通;對於每一個他所處理的物件,都會有一個匿名的副常式 -- 該副常式已經被以其創造之上的內容物件註祇過 -- 被喚起。這個副常式會傳回一整塊輸出,然後直接插入最後的輸出裡。


Copyright © 2001-2003 Six Apart. All Rights Reserved.