[MT Hack]讓MT的"導入/導出"功能包含blog的靜态命名

最近想把舊站的論壇數據導入到 MT 的 MySQL 中來,就順便看看了 MT 的 "導入/導出"功能。
MT 的"導入/導出"功能相當完善,可以從其它 MT 或者其它 Blog 工具向 MT 中導入Blog文章,或者将創建備份。
簡單分析了一下是純文本,格式相當簡單。

本地測試了一下, 導入、導出了幾次,發現有點遺憾,就是blog發表的時候,如果你選擇了自定義發布靜态HTML文件的名字後,導入、導出功能并不能記錄這個。

大家知道,MT的靜态HTML對象命名還是比較智能化的,會自動過濾blog的标題來生成HTML的名字。但是如果Title全部是中文的時候,就會變成 post_*方式的名字,這個時候大家一般都會自己定義輸出HTML的名字,讓它能反映Blog文章的内容。

這個名字在MySQL數據庫是存在的,隻是 "導入/導出"忽略了而已。既然我們需要,就加回來吧。

說改就改, 打開lib/MT/ImportExport.pm 模塊。
先改導出: 定位函數sub export{}


AUTHOR: <$MTEntryAuthor strip_linefeeds="1"$>
TITLE: <$MTEntryTitle strip_linefeeds="1"$>
STATUS: <$MTEntryStatus strip_linefeeds="1"$>
ALLOW COMMENTS: <$MTEntryFlag flag="allow_comments"$>
CONVERT BREAKS: <$MTEntryFlag flag="convert_breaks"$>
ALLOW PINGS: <$MTEntryFlag flag="allow_pings"$>

下面添加:

BASENAME: <$MTEntryBasename strip_linefeeds="1"$>

再改 導入;定位函數sub do_import { }
找到

elsif ($key eq 'TITLE') {    $entry->title($val);  }

下面添加

elsif ($key eq 'BASENAME') {    $entry->basename($val) if $val;  }

大功完成。
修改完成後,測試了幾次導入、導出,程序工作正常。

注意 : 函數 $entry->basename ,标簽 EntryBasename 什麼的相關資料你可以從 lib/MT/Entry.pm ,lib/MT/Template.pm ,lib/MT/Template/ContextHandlers.pm 等模塊中獲取映射函數。


By Easun 2006/09/20

更新 By 2006/10/22:
升級到了MT3.3,上面的修改有了一點小變化,需要使用 $MTEntryBasename 才可以(上面的已經作了修改)。