[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",

修改完成後,測試了幾次導入、導出,程序工作正常。
我的測試地址是 /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。