[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 才可以(上面的已经作了修改)。