[MT Hack]让MT的"导入/导出"功能包含tags

MT 的"导入/导出"功能居然不含 Tags ?
也许是因为 Tag 功能是 MT 系列后加的功能?
这个小的疏忽让重装 MT 的 YangKang 兄弟 吃了一个小亏

上次我在改写 MT 的"导入/导出"功能包含blog的静态命名的时候,就发现了这个问题,但是由于对 MT 系统的不太熟悉而且 MT::Tag 模块是个单独的模块而放弃了,而我的 MT 后台也让我折腾的乱78糟,到了快重新安装的地步了,所以鉴于自己的Perl还算熟悉,好好检查下代码,添加这个Hack吧,于人于己,都是方便。

MT 的帖子发布,修改是基于 MT::Entry 模块,而tag功能由 MT::Tag 模块实现,这两个模块,MT::Tag是作为MT::Entry 模块的基类存在,这个也是为什么上次修改“BaseName”时候没有顺手添加 Tag 功能的原因,搞清楚 Perl 模块中函数的继承关系真的是件头疼的事情,尤其是 MT 的 完全的 OOP 风格的代码:)

言归正转,说说怎么修改吧:)
1。先修改导出:
打开lib/MT/ImportExport.pm 模块,找到

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"$>

在其下添加:
<MTEntryIfTagged>
Tags: <MTEntryTags><$MTTagName$>,</MTEntryTags>
</MTEntryIfTagged>

这样导出的时候就会有Tags导出了,其中分割符号是","。
2。修改导出,
同样是lib/MT/ImportExport.pm 模块,找到
elsif ($key eq 'TITLE') {    $entry->title($val);  }

在其下添加:
elsif ($key eq 'Tags') {
    if ($val)
            {
              $cb->(MT->translate("Find tags ('[_1]')...\n", $val));
               my @tagnames = split(',',$val);
               $entry->add_tags(@tagnames);
               }
}

大功完成。
说明:$cb->(MT->translate("Find tags ('[_1]')...\n", $val)); 这句是输出的提示,可以删除之,如果你是完美主义者,你还应该在MT::L10N::zh_cn模块(语言包)中添加

"Find tags ('[_1]')...\n" => "在导入文件中发现Tags ( '[_1]')...\n",

修改完成后,测试了几次导入、导出,程序工作正常。
我的测试地址是 http://easun.org/temp/test/ ,大家可以 去看看:)

注意 : 同样,函数 $entry->add_tags ,标签 MTEntryIfTagged,MTEntryTags,MTTagName,什么的相关资料你可以从 lib/MT/Tag.pm ,lib/MT/Template.pm ,lib/MT/Template/ContextHandlers.pm 等模块中获取映射函数。


By Easun 2006/10/22

PS:随手给 YangKang 发个TrackBack ,不知道他看了偶这个事后动作会怎么样?-_-bbb
PPS:上篇“[MT Hack]让MT的"导入/导出"功能包含blog的静态命名”在MT3.3下有小的疏忽,已经做了Fix。