[活字印刷] 自訂 Movable Type 的預設模版

當妳拿 Movable Type 作為團體或社群或公司或任何單位的網站出版系統時,往往會需要把幾乎相同的模版套用到眾多不同的網誌裡,以營造出整體的一致性。當然妳可以善用模版編輯畫面裡的「連結模版至檔案」功能,但是這樣將會使得這些模版無法各自修改,而且妳還是得要一個一個設定、新增;相信我,如果妳跟我一樣大量運用了「模版模組」來撰寫模版的話,就會讓這樣的惡夢變本加厲成為夢魘。

在這種情況下,相信妳會很希望能夠把辛辛苦苦編撰好的模版變成 Movable Type 的預設模版,如此一來每當妳新增網誌的時候,系統就會幫妳把所有的模版準備好,妳祇需要再逐一按照真實情況加以微調就行了。這並非不可及的夢想,相反地這並不難,連我這種完全不會 Perl 的人都能輕易辦到。妳唯一需要做的事,就是用純文字編輯器來修改這個檔案:

MT安裝路徑/lib/MT/default-templates.pl

當然,這種事有其風險,所以請先做好備份,出了意外我可不做任何擔保。

這個檔案看似複雜,其實相當簡單。他的內容其實是這麼一回事:

[
{
'text' => '主索引模版的內容',
'outfile' => 'index.html',
'rebuild_me' => '1',
'type' => 'index',
'name' => '主索引'
},

{
'text' => 'RSD 模版的內容',
'outfile' => 'rsd.xml',
'rebuild_me' => '1',
'type' => 'index',
'name' => 'RSD'
},

{
'text' => 'RSS 2.0 索引模版的內容',
'outfile' => 'index.xml',
'rebuild_me' => '1',
'type' => 'index',
'name' => 'RSS 2.0 索引'
},

{
'text' => '彙整總索引模版的內容',
'outfile' => 'archives.html',
'rebuild_me' => '1',
'type' => 'index',
'name' => '總彙整索引'
},

{
'text' => '預覽迴響模版的內容',
'type' => 'comment_preview',
'name' => '預覽迴響模版'
},

{
'text' => '迴響出錯模版的內容',
'type' => 'comment_error',
'name' => '迴響出錯模版'
},

{
'text' => '彈出已上傳圖片模版的內容',
'type' => 'popup_image',
'name' => '彈出已上傳圖片模版'
},

{
'text' => '迴響清單模版的內容',
'type' => 'comments',
'name' => '迴響清單模版'
},

{
'text' => 'RSS 1.0 索引模版的內容',
'outfile' => 'index.rdf',
'rebuild_me' => '1',
'type' => 'index',
'name' => 'RSS 1.0 索引'
},

{
'text' => '樣式表模版的內容',
'outfile' => 'styles-site.css',
'rebuild_me' => '1',
'type' => 'index',
'name' => '樣式表'
},

{
'text' => '按時彙整模版的內容',
'type' => 'archive',
'name' => '按時彙整'
},

{
'text' => '分類彙整模版的內容',
'type' => 'category',
'name' => '分類彙整'
},

{
'text' => '單篇彙整模版的內容',
'type' => 'individual',
'name' => '單篇彙整'
},

{
'text' => '引用清單模版的內容',
'rebuild_me' => '0',
'type' => 'pings',
'name' => '引用清單模版'
},

{
'text' => 'paz',
'type' => 'custom',
'name' => 'module'
},

]

如果妳恰巧懂得 Perl 的話,就會明白這不過是一個雜湊參照組成的陣列參照罷了。不過我猜妳很有可能跟我一樣,並不懂這些外星術語(所以我也有可能說錯);不打緊,讓我們直觀地觀察一下這其中的規則:

  1. 這個檔案以「 [ 」開始,以「 ] 」結束,裡面陳列著所有要建立出來的模版;
  2. 每一個實際會被做出來的模版,都以「 { 」開始,以「 } 」結束,彼此間以「 , 」間隔開來;
  3. 每一個模版的內容都按照「 'A' => 'B' 」的格式,來表示「 A 」欄位裡要填寫的內容是「 B 」。

現在好像清晰多了。如果妳再多花點心思,大概就可以更進一步地歸納出有這些欄位可以用:

可用的欄位設定
名稱意義附註
text模版本體妳可以把整個檔案貼進來,包括換列
outfile輸出檔案請輸入完整的檔名
rebuild_me重建索引模版時自動重建此模版1 表示要, 0 表示不要
type模版的類別請參考這篇文章後面的解釋
name模版名稱請輸入模版的名稱

事情好像還沒有這麼簡單,妳還得先弄明白有哪些「模版的類別」可以用,然後每一種模版的類別也決定了那個模版裡,還能用哪些欄位。要弄清這一點,可能得要翻開程式源碼,不然就是要有足夠敏銳的觀察力。別緊張,我已經幫妳整理好了:

模版的類別
類別名稱可用欄位
索引模版indexoutfile, rebuild_me, name
按時彙整模版archive
分類彙整模版category
單篇彙整模版individual
迴響清單模版comments
迴響預覽模版comment_preview
迴響出錯模版comment_error
引用清單模版pings
彈出已上傳圖片模版popup_image
模版模組custom

等等,別急,還有最後一件事。就是在「模版本體」裡的東西,如果有遇到「 ' 」的話(通常會是在 JavaScript 的部分),一定要記得加上「 \ 」讓他們都變成「 \' 」喔!不然妳就會看到一個「找不到預設模版清單, default-templates.pl 在哪裡?」的錯誤訊息喔!

嗯,這樣似乎就夠了呢。性急的人不妨備份之後自己先試著玩玩看,這幾天我要是有空就會把這裡的模版包上來給大家抓。

jedi.org: