Movable Type 完全手冊:第九章 ─ 模版

« 目錄


第九章 ─ 模版

這一章的份量相當之多,前半段是比較抽象的論述以及注意事項,著重在觀念的釐清,接著是把這一章範圍內的使用者介面快速描述一遍;由於本章涉及大量的 HTML 碼,所以將不會以逐步驟抓圖的方式解說,否則將把篇幅拖得過於冗長。而後半段則主要是摘錄改寫自官方文件裡的資料。雖然本章對於初學乍練的讀者來說會比較難以吸收,但是對於稍微有些基礎的讀者來說,卻應該是相當豐富而實用的資料。

模版結構

Movable Type 的模版能力恐怕正是其強大之處了。這套系統使得網誌的「內容」可以跟「形式」抽離;當妳在修改版面安排(形式)的時候,完全不會影響到內容;反之亦然。然而在 Movable Type 的預設模版裡,又更進一步地使用了 CSS ,把這個「形式」又拆解成「順序結構」跟「效果」;前者是 HTMLXHTML 的部分,後者則是 CSS 的部分。藉由這樣的拆解,妳可以重新安置頁面中的各個元件,而不改變每個元件的呈現效果;也可以重新設計每個元件的呈現效果,而不會改變頁面元件的安置。

像是這樣的設計理念,有一個說法稱做「模組化」,強調各自獨立的合作關係,不會一個地方爛掉就全部爛光光。而這也是妳在規劃模版的時候所該記在心裡面的。

以下我們要討論的事情大概都發生在模版編輯畫面裡,任何時候妳都可以如圖一按下左方工具列上的「模版」按鈕,就可以開始把玩模版了。

按下「模版」按鈕
圖一:按下左方工具列的「模版」按鈕。

接下來讓我們一一仔細察看:

索引模版

列出模版畫面的第一區裡,列出的是索引模版。妳可以點擊模版名稱欄位裡的任何一個,就能夠加以編輯該模版,或者調整跟該模版有關的設定;另外在這個畫面裡還會標示出各個模版所會輸出的檔案名稱,也註明它們會不會在重建索引模版的時候一併被自動重建。當然妳還可以利用刪除核選框以及刪除按鈕來刪除不再使用的模版,或者是點擊「建立新的索引模版」鏈結來新增新的索引模版。

索引模版
圖二:索引模版。
模版名稱
圖三:索引模版的模版名稱。
輸出檔案
圖四:索引模版的輸出檔案資訊。
是否重建的資訊
圖五:索引模版是否重建的資訊。
刪除核選框及刪除按鈕
圖六:索引模版的刪除核選框及刪除按鈕。
「建立新的索引模版」鏈結
圖七:「建立新的索引模版」鏈結。

當妳新增或編輯索引模版的時候,首先能夠修改這個模版的模版名稱,這個名稱祇是用來顯示用的,所以妳甚至可以把好幾個模版都取做相同的名字 ─ 祇要妳自己不會弄混就好。

除此之外妳也可以修改輸出檔案的檔名,這個設定就很重要了;由索引模版所產生出來的檔案會被放在本機站台路徑底下,檔案名稱就是妳在此所設定的名稱,其他讀者則可以由站台網址來讀取這個檔案。一旦妳修改了這一欄的設定值,原先的檔案並不會消失,但是更新過後的檔案卻會使用妳新設定的名稱;這意味著妳得記得一併修改相關的其他檔案或模版,讀者們(或搜尋引擎)纔不會祇看到老舊不更新的檔案。

接下來還有一個「重建索引模版時自動重建此模版」的核選框,預設是核選著的,表示每當妳的索引模版需要更新(像是新增了文章、或儲存了文章修改)時,這個模版也會被一併重建成檔案。如果妳的模版並不會跟文章扯上關係,例如祇是單純的樣式表,那麼妳大可取消核選這個核選框,如此一來就可以減少系統每次需要重建的檔案數量,而降低系統負擔。

將此模版連結到檔案」是一個進階的功能,讓妳把這個模版內容實際存放到伺服器上的某個檔案;藉由這個功能,妳就能夠讓好幾份網誌使用完全相同的模版,而且它們也都會同步更新。不過這個功能也很有可能相當具有危險性 ─ 因為妳可以以此開啟系統裡的某個特定檔案,並且加以修改覆寫。如果妳沒有這麼複雜的需求,也不懂系統上各個目錄裡的東西的話,建議妳還是空著別動。

最大的那一個欄位就是實際的模版內容了。妳可以在此任意地編輯修改模版內容。一旦妳修改了模版內容或者是上述的其他欄位後,別忘了還要按下「儲存」按鈕,纔會把妳所做的變更儲存回資料庫;接著妳還得按下「重建」按鈕,纔能以更新過的模版內容,製作新的靜態頁面檔案。

模版名稱
圖八:可加以編輯的「模版名稱」欄位。
輸出檔案
圖九:可加以修改的「輸出檔案」欄位。
「重建索引模版時自動重建此模版」核選框
圖十:「重建索引模版時自動重建此模版」核選框。
「將此模版連結到檔案」欄位
圖十一:「將此模版連結到檔案」欄位。
模版本體
圖十二:模版本體。
「儲存」按鈕
圖十三:「儲存」按鈕。
「重建」按鈕
圖十四:「重建」按鈕。

Movable Type 預設的主索引模版裡,除了提供幾個不同版本及功能的 RSS 模版之外,還有兩個可以用 CSS 調整版面的 HTML/XHTML 模版,分別是主索引模版以及總彙整索引模版。當然還少不了那個用來調整版面的 CSS 模版:樣式表模版。

首先我們要來講講這個 HTML/XHTML 的部分。雖然說,有了 CSS 之力,妳可以隨意地安置各個元件,幾乎可以不要考慮他們的先後關聯,都有辦法做出整齊漂亮的版面;但是在這裡仍舊要強調,邏輯清晰的 HTML/XHTML 纔是建構優良頁面的基礎

為什麼呢?有幾個主要原因:

切記,編撰 HTML/XHTML 模版的時候,妳應當揚棄以往使用表格來排版的方式,而把排版的工作留給 CSS 來處理。表格應該祇在真的是「表格」的情況下纔使用。

撰寫 HTML/XHTML 模版的時候,妳可能會需要具備基本的 HTML/XHTML 能力,另外可以參考 Movable Type 使用手冊:模版標籤來插入其他 MT 標籤;如果妳之前也有使用過其他的網誌系統或者出版管理系統,而且也用那些系統製作過模版的話,妳也許會想參考一下 Movable Type 模版;這份文件裡有對於不同系統間模版差異的解釋,也有著簡單的模版作用機制說明,對於編撰模版來說,一定有所幫助。

如果想要做出比好還要好的 HTML/XHTML 模版,也應該留意 Accessibility(親和力/無障礙) 的議題。妳可以看一下 W3C Web Accessibility Initiative 的內容(有人正在把它翻譯成中文版);另外也有幾份不錯而簡短的文件該讀一讀,像是我跟 hlb 翻譯完的 Dive Into Accessibility (深入親和力)就是一本分量輕薄的小書,可以幫助妳在三十天內讓 Movable Type 做出來的網頁更棒。

當妳寫出 HTML/XHTML 模版後,也可以用 W3C MarkUp Validation Service 來驗證看看是不是有語法上的瑕疵;通常要修改這些瑕疵都會耗上大量的時間精力,但是卻可以幫助妳把 HTML/XHTML 寫得更合邏輯;事實上,這也可以鍛鍊妳的 HTML/XHTML 功力。

CSS 是另外一門大學問;舉凡字形變化、邊框留白、顏色圖片乃至於游標音效,都幾乎可以透過 CSS 來達成。除此之外,可重複利用也是另一個 CSS 的特色;祇要妳規劃得當,就可以讓同一類的 HTML/XHTML 元件去取用相同的屬性變化,毫不囉唆。

網路上可以找到的中文 CSS 相關文件不特別多,不過妳可以從 hlb 翻譯的CSS實務排版技巧、秘訣與技術開始著手。大致上當妳一開始祇能夠修改既有的 CSS 檔案時,妳可以這麼做:

另外一個 CSS 的重點是在於欄框的階層。 CSS 中任何元件預設都是「佔滿可用空間」的,如果妳要更動佔用空間的尺寸、位置的話,就得留意這個「頁(page) ─ 格(box) ─ 欄(margin) ─ 框(border) ─ 留白(padding) ─ 內容物」的先後關係:

通常當妳很高興地安排完一整套的 CSS 欄框排版之後,很有可能出乎意料(或意料之中?)地發現,瀏覽器所畫出來的樣子跟妳原先所設想的完全不同!所以在嘗試及除錯的階段,妳可以先暫時地使用粗而明顯的邊框,來觀察看看到底瀏覽器把妳的欄框放到哪裡去了。以下是一個除錯用邊框的範例:

border: red solid 10px;

妳可以等位置擺對了之後,再把這個邊框改回妳想要的樣子(或者把它去掉,如果妳不想要有邊框的話)。

大致說來,妳可以任意地把玩 CSS 的各種屬性,無須擔心會損毀妳的內容跟架構。所以,盡情享樂吧!

當妳寫出 CSS 模版後,也可以用 W3C CSS Validation Service 來驗證看看是不是有語法上的瑕疵。好消息是,這應該會比 HTML/XHTML 的驗證容易通過得多了。

另外還有一個壞消息:目前號稱市場佔有率最高的 IE 實際上對於 W3C CSS 的實做程度卻最低;所以妳可能祇需要花 20% 的時間就可以做出漂亮的版面,卻要再花上 80% 的時間來處理 IE 的相容性。事情當然還可以更糟,幾個月前微軟的 IE 團隊表示,三年內將不會有任何 IE 的更新檔出現,因此這些問題在接下來的幾年內也都不會被解決掉。

額外給華文世界使用者的資訊: KKMan 的結果會更糟。

至於 RDF 的用途是用來描述妳所能夠提供給其他人的資訊有哪些用的。透過 RDF 的架構,妳纔可以使用 RSS 來跟其他站台串聯彙整。

如果妳對此毫無理解,那倒也沒有關係;因為 MT 內附的 RDF 模版其實已足堪用了。妳唯一應當注意的事情是,確定裡面關於內容語言的描述是否正確。如果妳的網誌內容是繁體中文,請確定妳用了 <dc:language>zh-tw</dc:language>(RSS 1.0) 或 <language>zh-tw</language>(RSS 0.91)。

至於更深入的細節,則建議可以參考一下 Resource Description Framework (RDF) / W3C Semantic Web Activity 以及 RDF Site Summary (RSS) 1.0

實際上 RDF 的門派版本相當分歧雜亂,真的打算開始摸索的朋友恐怕得先有點心理準備纔行。

彙整相關模版

列出模版畫面的第二區裡,列出的是彙整相關模版。妳可以點擊模版名稱欄位裡的任何一個,就能夠加以編輯該模版;妳也可以利用刪除核選框以及刪除按鈕來刪除不再使用的模版,或者是點擊「建立新的彙整模版」鏈結來新增新的彙整相關模版。

彙整相關模版
圖十五:彙整相關模版。
模版名稱
圖十六:模版名稱。
刪除核選框及刪除按鈕
圖十七:刪除核選框及刪除按鈕。
「建立新的彙整模版」鏈結
圖十八:「建立新的彙整模版」鏈結。

當妳新增或編輯彙整相關模版的時候,首先能夠修改這個模版的模版名稱,這個名稱祇是用來顯示用的,所以妳大可把好幾個模版都取做相同的名字 ─ 祇要妳自己不會弄混就好。

跟索引模版不同的地方在於妳並不能修改輸出檔案的檔名,各種彙整檔案的檔名是在網誌組態的畫面裡設定的,請參考第八章的介紹。

將此模版連結到檔案」是一個進階的功能,讓妳把這個模版內容實際存放到伺服器上的某個檔案;藉由這個功能,妳就能夠讓好幾份網誌使用完全相同的模版,而且它們也都會同步更新。不過這個功能也很有可能相當具有危險性 ─ 因為妳可以以此開啟系統裡的某個特定檔案,並且加以修改覆寫。如果妳沒有這麼複雜的需求,也不懂系統上各個目錄裡的東西的話,建議妳還是空著別動。

最大的那一個欄位就是實際的模版內容了。妳可以在此任意地編輯修改模版內容。一旦妳修改了模版內容或者是上述的其他欄位後,別忘了還要按下「儲存」按鈕,纔會把妳所做的變更儲存回資料庫。

「模版名稱」欄位
圖十九:可加以編輯的「模版名稱」欄位。
「將此模版連結到檔案」欄位
圖二十:「將此模版連結到檔案」欄位。
模版本體
圖二十一:模版本體。
「儲存」按鈕
圖二十二:「儲存」按鈕。

Movable Type 一開始就提供的三個彙整相關模版分別是分類彙整模版、單篇彙整模版和按時彙整模版。顧名思義,前兩個模版分別是拿來給分類彙整以及單篇彙整用的,而第三個模版則可以適用於逐月彙整、逐週彙整以及逐日彙整

其他模版

列出模版畫面的第三區裡,列出的是其他模版。妳可以按下各個模版前面的編輯按鈕,來加以編輯該模版;這一區的模版都有特定的功能,因此妳既不能刪除任何一個,也無法新增這類的模版。

其他模版
圖二十三:其他模版。
其他模版的「編輯」按鈕
圖二十四:其他模版的「編輯」按鈕。

這一類的模版都是固定的,因此妳也不能夠更改各個模版的名稱 ─ 它們從存在之時就被賦予特殊的用途了,因此妳不能隨意地修改。

將此模版連結到檔案」是一個進階的功能,讓妳把這個模版內容實際存放到伺服器上的某個檔案;藉由這個功能,妳就能夠讓好幾份網誌使用完全相同的模版,而且它們也都會同步更新。不過這個功能也很有可能相當具有危險性 ─ 因為妳可以以此開啟系統裡的某個特定檔案,並且加以修改覆寫。如果妳沒有這麼複雜的需求,也不懂系統上各個目錄裡的東西的話,建議妳還是空著別動。

最大的那一個欄位就是實際的模版內容了。妳可以在此任意地編輯修改模版內容。一旦妳修改了模版內容或者是上述的其他欄位後,別忘了還要按下「儲存」按鈕,纔會把妳所做的變更儲存回資料庫。

「模版名稱」不能加以編輯
圖二十五:「模版名稱」是固定的,無法加以編輯。
「將此模版連結到檔案」欄位
圖二十六:「將此模版連結到檔案」欄位。
模版本體
圖二十七:模版本體。
「儲存」按鈕
圖二十八:「儲存」按鈕。

這裡總共有五個模版。迴響清單模版是用來製作動態迴響清單的模版;迴響預覽模版所製作的動態頁面,也就是讀者預覽她們即將發表的迴響時,所看到的頁面;迴響出錯模版則會決定當讀者發表評論出錯的時候,要看到的錯誤訊息頁面的樣子;引用清單模版則是用來製作列出某篇文章的引用清單的動態頁面的模版;至於彈出已上傳圖片模版則是搭配上傳圖片並做成彈出式圖片的功能的模版。

模版模組

列出模版畫面的最後一區裡,列出的是模版模組。妳可以點擊模版名稱欄位裡的任何一個,就能夠加以編輯該模版;妳也可以利用刪除核選框以及刪除按鈕來刪除不再使用的模版,或者是點擊「建立新的模版模組」鏈結來新增新的模版模組。

模版模組
圖二十九:模版模組。
模版模組的「模版名稱」欄位
圖三十:模版模組的「模版名稱」欄位。
沒有內容的,模版模組的刪除核選框及刪除按鈕
圖三十一:模版模組的刪除核選框及刪除按鈕,現在因為沒有東西,所以妳看不到核選框。
「建立新的模版模組」鏈結
圖三十二:「建立新的模版模組」鏈結。

當妳新增或編輯模版模組的時候,妳也能夠修改這個模版的模版名稱,這個名稱卻不祇是用來顯示用而已,它們都會被拿來用於 <MTInclude> 標籤module 屬性,所以妳最好乖乖祇使用英文字母跟數字來當作模版名稱,而且連特殊符號也避免使用會比較好。當然名稱也就不能重複使用了。

將此模版連結到檔案」是一個進階的功能,讓妳把這個模版內容實際存放到伺服器上的某個檔案;藉由這個功能,妳就能夠讓好幾份網誌使用完全相同的模版,而且它們也都會同步更新。不過這個功能也很有可能相當具有危險性 ─ 因為妳可以以此開啟系統裡的某個特定檔案,並且加以修改覆寫。如果妳沒有這麼複雜的需求,也不懂系統上各個目錄裡的東西的話,建議妳還是空著別動。

最大的那一個欄位就是實際的模版內容了。妳可以在此任意地編輯修改模版內容。一旦妳修改了模版內容或者是上述的其他欄位後,別忘了還要按下「儲存」按鈕,纔會把妳所做的變更儲存回資料庫。

「模版名稱」欄位
圖三十三:可加以修改的「模版名稱」欄位。
「將此模版連結到檔案」欄位
圖三十四:「將此模版連結到檔案」欄位。
模版本體
圖三十五:模版本體。
「儲存」按鈕
圖三十六:「儲存」按鈕。

一開始 Movable Type 並沒有提供任何預先建立好的模版模組的,這是因為 Movable Type 希望一開始不要把事情弄得太複雜 ─ 可不是每個人都能夠無痛接受「模版」的觀念。但是隨著妳的模版越寫越複雜,妳會開始發現有一些重複的片段反覆出現在多個模版裡,這時候就是「模版模組」派上用場的時候了。

妳可以把這些完全相同的片段抽出來,放到模版模組裡,再把 <MTInclude> 標籤放進原來這些片段會出現的地方。從此之後妳祇要修改這個模版模組,再重建所有的檔案,就可以一次更新眾多模版以及跟它們有關的靜態頁面檔案。

這麼一來,無論是要維護更新模版或是挪動各個組件在某個模版裡的順序,都將無比容易。

搜尋模版

搜尋模版跟 Movable Type 裡的其他模版管理起來並不同,因為他們並非依網誌為準的,所以放在編輯選單的『模版』區段中反而沒有意義。搜尋模版實際上是一些放在妳的 search_templates/ 目錄中的檔案;這個目錄應該會跟 mt.cgi 位於同一個位置。

對於 Windows 的使用者來說,這些搜尋模版應該位於像是 C:\Program Files\OurInternet\Movable Type\mt\search_templates\ 的資料夾裡面;對於 UN*X 的使用者來說,則可能位於像是 /usr/local/www/cgi-bin/mt/search_templates/ 的路徑裡。

在妳的搜尋模版中,妳可以用一些特殊的模版標籤集合來顯示搜尋結果。不過妳幾乎也可以用其他的 Movable Type 標籤;不過當然妳還是得要尊重整體的脈絡。除此之外,因為妳的搜尋結果頁面是動態隨著每一次有人搜尋妳的站台時所產生的,所以妳應該要避免使用那些會消耗伺服器大量資源來重建的標籤(像是 <MTArchiveList><MTCalendar> )。

妳也可以在妳的搜尋模版中使用 <MTInclude> 標籤,來包含某個搜尋模組或外部檔案。妳甚至可以把某個網誌當作是前後文(因為模版模組會依各個網誌而存),然後在 <MTSearchResults> 容器之外這麼用這個標籤。不過我們仍然要警告妳不要輕易使用這種方法,尤其是妳有多重網誌的時候更是如此。例如說,如果妳在某個模版中用了

<$MTInclude module="Header"$>

那麼系統就會知道它所要找的模組名為 Header 。如果搜尋結果是找到了,會很簡單地把網誌按照字母順序列出;反之要是沒有找到, Movable Type 就會試著從妳的資料庫裡載入某個網誌(被選擇的網誌則沒有定義)。

在 Movable Type 的預設模版中包含有一個簡單的搜尋表單來搜尋妳的站台,它看起來像這樣:

<form method="get" action="<$MTCGIPath$><$MTSearchScript$>">
<label for="search" accesskey="4">搜尋本站:</label><br />
<input id="search" name="search" size="20" /><br />
<input type="submit" value="搜尋" />
</form>

至於顯示所有選項的搜尋表單,看起來可能會像這個樣子:

<form method="post" action="<$MTCGIPath$><$MTSearchScript$>">
<input size="30" name="search" value="<$MTSearchString$>" />
<input type="submit" value="Search" /><br />
<input type="checkbox" name="CaseSearch" /> 大小寫吻合 
<input type="checkbox" name="RegexSearch" /> 使用正規表示式<br />
<b>搜尋範圍:</b>
<input type="radio" name="SearchElement" value="entries" /> 祇有文章項目 
<input type="radio" name="SearchElement" value="comments" /> 祇有評論 
<input type="radio" name="SearchElement" value="both" /> 文章項目和評論 <br />
<b>排序欄位:</b>
<select name="SearchSortBy">
<option value="created_on">發表日期</option>
<option value="title">標題</option>
</select><br />
<b>排序方式:</b>
<select name="ResultDisplay">
<option value="ascend">遞增</option>
<option value="descend">遞減</option>
</select><br />
<b>排除下列網誌:</b>
<MTBlogs>
<input type="checkbox" name="ExcludeBlogs" value="<$MTBlogID$>" /> <$MTBlogName$>
</MTBlogs><br />
<b>從下列時間範圍內搜尋文章項目:</b>
<select name="SearchCutoff">
<option value="9999999">從頭開始</option>
<option value="7">從一週前開始</option>
<option value="14">從兩週前開始</option>
<option value="30">從一個月前開始</option>
<option value="60">從兩個月前開始</option>
<option value="90">從三個月前開始</option>
<option value="365">從一年前開始</option>
</select><br />
<b>每份網誌的搜尋結果上限:</b>
<select name="MaxResults">
<option value="5">5</option>
<option value="10">10</option>
<option value="25">25</option>
<option value="50">50</option>
<option value="100">100</option>
<option value="9999999">無上限</option>
</select>
</form>

這個搜尋表單就可以提供使用者更多改變搜尋參數的控制變項,讓她們得以指定像是大小寫吻合的屬性,或者是以正規表示式來進行搜尋,而非僅祇用布林字串查詢。搜尋也可以被限定在僅祇有項目或評論內(也可以兩者均是),請注意,評論搜尋會比文章項目搜尋花去更多的時間和資源。

上面的表單同時也讓使用者在搜尋時可以排除特定的網誌,對於那些祇想要搜尋某幾個網誌的讀者來說會很好用。另一個替換排除網誌的作法像這樣:

<b>包含下列網誌:</b>
<MTBlogs>
<input type="checkbox" name="IncludeBlogs" value="<$MTBlogID$>" /> <$MTBlogName$>
</MTBlogs><br />

基本上這就是跟排除網誌完全相反的作法,不過妳當然有可能因為任何理由而改採這一種作法。例如說,這樣的作法就可以讓妳祇搜尋特定的網誌,而不需要列出一堆要排除掉的網誌。妳祇需要把這一段加進表單裡:

<input type="hidden" name="IncludeBlogs" value="<$MTBlogID$>" />

<$MTBlogID$> 總是對應到現用的網誌,所以這個搜尋祇會被限制在目前被瀏覽的網誌裡。

上面的範例是一個直接搜尋的例子,完整的新評論搜尋表單看起來應該像這樣:

<form method="post" action="<$MTCGIPath$><$MTSearchScript$>">
<input type="hidden" name="Type" value="newcomments" />
<b>排除下列網誌:</b>
<MTBlogs>
<input type="checkbox" name="ExcludeBlogs" value="<$MTBlogID$>" /> <$MTBlogName$>
</MTBlogs><br />
<b>從下列時間範圍內搜尋文章項目:</b>
<select name="CommentSearchCutoff">
<option value="9999999">從頭開始</option>
<option value="7">從一週前開始</option>
<option value="14">從兩週前開始</option>
<option value="30">從一個月前開始</option>
<option value="60">從兩個月前開始</option>
<option value="90">從三個月前開始</option>
<option value="365">從一年前開始</option>
</select><br />
<b>文章項目搜尋結果上限:</b>
<select name="MaxResults">
<option value="5">5</option>
<option value="10">10</option>
<option value="25">25</option>
<option value="50">50</option>
<option value="100">100</option>
<option value="9999999">無上限</option>
</select><br />
<input type="submit" value="尋找新迴響" />
</form>

如果妳準備了多個不同的搜尋模版,那麼首先妳得用任何文字編輯器開啟妳的 mt.cfg 檔案,然後用 AltTemplate 指令來組態替換模版。例如說,如果妳有兩份網誌( WorkPlay ),而且妳想要讓妳的網誌有自己的模版,妳可能會加上這些東西:

AltTemplate work work.tmpl
AltTemplate play play.tmpl

接下來妳還得修改既有網誌的模版,讓它們在建造搜尋頁面的時候也使用特定模版;妳可以用一個隱藏的表單輸入。例如說妳就可以把下列的搜尋表單加入妳的 Work 網誌:

<input type="hidden" name="Template" value="work" />

注意:如果妳祇想要把搜尋範圍限定在祇有一個網誌內,妳也許也會想要在表單裡加上:

<input type="hidden" name="IncludeBlogs" value="<$MTBlogID$>" />

同樣地,別忘了在妳的搜尋模版裡也應該做類似的調整,否則當使用著接下去搜尋的時候,就會發現搜尋結果頁面的樣子又變了!

模版標籤

以下我們將先為各位概略描述用於 Movable Type 的模版標籤。

模版和標籤哲學

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

祇要妳掌握住這兩個概念,所有的標籤對妳來說就都不是難題了。

標籤種類

Movable Type 的模版標籤可以分為兩類 ─ 容器和變數:

容器標籤

有些 MT 標籤是『容器』標籤,裡面可能裝有被稱為子模版的東西;其實就是一些文字片段和 MT 標籤,然後被包在另外兩個 MT 標籤:容器的開頭和容器的結尾之間。舉例來說,如果有個叫做 <MTFoo> 的標籤,那麼妳也許會在妳的模版裡看到下列的組成元件:

<MTFoo>
Foo bar
</MTFoo>

這個容器的開頭標籤和結尾標籤看起來都很像標準的 HTML 標籤。

容器標籤可能代表著一份清單或者是一種條件。

如果容器代表著一份清單 ─ 例如像是 <MTEntries> 標籤 ─ 那麼容器內的子模版將會套用於清單上的每一項。舉例來說,如果妳用了一個 <MTEntries> 標籤,那麼在 <MTEntries> 標籤和 </MTEntries> 標籤間的組成元件就會套用在清單上的每一則文章項目。

如果容器代表著一種條件 ─ 例如像是 <MTEntryIfExtended> 標籤 ─ 那麼開頭標籤和結尾標籤間的組成元件就祇有條件吻合時纔會顯示。舉例來說,在 <MTEntryIfExtended> 的情況下,條件考驗著是否文章項目有延伸的部分(『更多文字』)。

變數標籤

所有的非容器標籤通通都是單純的變數替換標籤。它們其實是資訊動態片段的位置保留器。舉例來說, <$MTEntryTitle$> 標籤就會被文章項目的標題代換掉。

標籤語法

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

<$MTEntryBody$>

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

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

標籤屬性

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

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

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

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

情境

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

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

標籤索引

以下我們將分類列出所有能用於 Movable Type 模版裡的標籤:

網誌資料

文章項目列示/彙整頁面

迴響

預覽迴響

當妳做出迴響預覽模版的時候,妳應該要採用下列這些標籤。這些標籤全部都跟前述的迴響小節裡名稱相近的標籤作用相仿;唯一的不同是這些標籤祇能用於預覽之用,而不是用在 <MTComments> 區塊中。

這些標籤全部都跟前述的迴響小節裡名稱相近的標籤意思相同。

彙整模版及彙整總索引

下列的模版標籤和變數適用於妳的彙整頁面及彙整總索引。

與分類相關的標籤

接下來這些標籤可以用來顯示網誌上的類別清單,以及每一個類別的資訊( ID 、標籤等)。

月曆顯示標籤

下列的標籤可以用來在妳的文章項目裡畫出月曆。事實上並沒有任何限制說妳一定得要用 HTML 的表格來畫出月曆;這些標籤完全是泛用型的,因此妳可以利用她們來做出各種迥然不同樣子的月曆。

以下是一個標準的月曆顯示組成,會顯示出目前的月份。

<table border="0" cellspacing="4" cellpadding="0" summary="Monthly calendar">
<caption><$MTDate format="%B %Y"$></caption>
<tr>
<th abbr="星期日" align="center">Sun</th>
<th abbr="星期一" align="center">Mon</th>
<th abbr="星期二" align="center">Tue</th>
<th abbr="星期三" align="center">Wed</th>
<th abbr="星期四" align="center">Thu</th>
<th abbr="星期五" align="center">Fri</th>
<th abbr="星期六" align="center">Sat</th>
</tr>
<MTCalendar>
<MTCalendarWeekHeader><tr></MTCalendarWeekHeader>
<td <MTCalendarIfToday>bgcolor="#EEEEEE"</MTCalendarIfToday> align="center">
<MTCalendarIfEntries><MTEntries lastn="1"><a href="<$MTEntryLink$>"><$MTCalendarDay$>
</a></MTEntries></MTCalendarIfEntries>
<MTCalendarIfNoEntries><$MTCalendarDay$></MTCalendarIfNoEntries>
<MTCalendarIfBlank>&nbsp;</MTCalendarIfBlank></td>
<MTCalendarWeekFooter></tr></MTCalendarWeekFooter>
</MTCalendar>
</table>

請注意:計算出月曆顯示的代價相當高昂,所以如果妳想要在網站上的每一頁都擺上同樣的月曆,比較好的作法是在索引模版裡建立一個月曆,然後用伺服器端的囊括功能或者是 PHP (或者是任何動態的網頁伺服器工具)來把這個檔案囊括到妳的每一頁裡。

引用功能標籤

有一些標籤是和引用功能系統有關的。

搜尋結果標籤

下列這些標籤祇能用於妳的搜尋模版裡。

其他標籤

這些標籤並不適合放在上述任何一類裡。

全域標籤屬性

全域標籤屬性可以被用於任何變數代換標籤(會被代換成某個值的標籤 ─ 這種標籤的對比就是會『容納』其他組成元素和標籤的容器標籤)。然而這並不意味著當他們被使用於任何標籤裡,都一定要有意義;實際上使用者得自己判斷特定的標籤屬性是否在實做上有意義。

全域屬性的用法就跟標籤專一屬性的用法一樣:在標籤裡使用 name="value" 配對。例如:

<$MTEntryExcerpt encode_html="1"$>
這個標籤會被取代成以 HTML 編碼過的文摘。

以下是全域標籤屬性的清單:

日期標籤格式

Movable Type 用了標準的 strftime 格式字串來描述日期和時間。(然而,請注意 strftime 本身並不真的是拿來施用格式的。)在任何的日期標籤裡,妳都應該可以用 format 屬性來指定格式字串,就像這樣:

<$MTDate format="%B %e, %Y %I:%M %p"$>
上面這個格式正是英文日期的預設格式,會做出像是這樣子的日期:
September 20, 2001 11:44 PM
妳可以在網誌組態的顯示日期的語言裡面選取不同的語言,這個語言會被套用在週裡的名稱、月份的名稱和上午/下午的說明。預設被使用的語言是英文

妳也可以用 language 屬性來指定語言,覆寫掉預設的設定;這祇會套用在妳正在制訂格式的那個日期字串上。以下是可用的語言標籤清單: czdknlenfrdeisjpitnoplptsiesfise

以下則是格式說明清單。


保留部分權利AttributionShare Alike