LinkRoller替代Blogroll
升级到MT4,比较普遍的问题就是插件兼容性,被抱怨的比较多的是Blogroll,Blogroll的标签在MT4中无法识别,作者到目前为止还没有升级代码,有人发布了一个替代品LinkRoller ,但有部分Blogroll的功能没有实现:Link的分类和优先顺序,临时的解决方法是用tags与创建时间来对应。
LinkRoller作者提供了安装指南,文件copy 结束,重新访问MT4管理界面,会提示升级,升级过程会将Blogroll所属表的数据自动导入MT4的Asset系列表中(不copy Blogroll的lib文件到LinkRoller 也可以自动导入数据),原来Blogroll的Category(分类)属性,在LinkRoller中会关联到Tags属性。
plugin升级完成后,更新模板代码(参照了Justin的文章):
<mt:Tags type="asset" sort_by="name">
<h2><mt:TagName></h2>
<MTSetVarBlock name="linktag"><mt:TagName /></MTSetVarBlock>
<ul class="links">
<mt:assets type="link" tag="$linktag" sort_by="$created_on" sort_order="ascent">
<li><a href="<mt:assetURL />" title="<mt:assetDescription />"><mt:assetLabel /></a><li>
</mt:assets>
</ul>
</mt:Tags>
这部分代码会显示不同Tags下面的Links(首页右侧有实例),Links的顺序以创建时间为准,这符合我原来的需求,也可以更改为按名称排序等方式:sort_by="label",如果需要再现在Blogroll 当中手工设置的无规律排序方式,那么有点麻烦,有人变通的活用了Author 属性。
如果遇到Plugin升级后,Link数据有中文乱码的问题,如果是Mysql数据库,那么可以检查一下mt_asset表的字符集设置,如果是Latin1,改成utf8试试,直接Alter表和相关列的定义即可,数据不用动。值得一提的是Mysql有非常灵活的字符集设定,可以在安装实例、数据库、表、列,不同的级别上独立设定,因此Alter命令必须在表本身,以及所有需要的列上面分别运行。
Favicon
Favicon是个获取网站访问者的网站的favicon.ico的插件,只能用在Comments与Trackbacks的上下文中,目前的版本还是1.4,默认地,其在MT4中可以很好的运行。如果不幸遇到以下错误信息:"Undefined subroutine &URI::Escape::escapechar called",那么可能是MT4的某个插件包含了一个较MT4 自身lib更旧的Escape.pm,在我的例子里是Blogroll,找到后将其删除或者重命名即可。
$ find cgi-bin/mt -name "Escape.pm" $ mv cgi-bin/mt/plugins/Blogroll/lib/Escape.pm cgi-bin/mt/plugins/Blogroll/lib/Escape.pm.bak
我曾经为Favicon加了几行代码,让其支持Blogroll的标签,即自动获取好友网站的favicon.ico并显示在其链接上。同样地,对于LinkRoller,也需要几行额外的代码:
sub favicon {
my($ctx, $args) = @_;
my $c;
my $u;
if ($c = $ctx->stash("ping")) {
favicon_debug("Trackback in MTFavicon");
$u = $c->source_url;
} elsif ($c = $ctx->stash("comment")) {
favicon_debug("Comment in MTFavicon");
$u = $c->url;
favicon_debug("URL for comment ID <" . $c->id . "> is <$u>");
} elsif ($c = $ctx->stash("br_entry")) {
favicon_debug("Blogroll in MTFavicon");
$u = $c->uri;
} elsif ($c = $ctx->stash("asset")) {
favicon_debug("LinkRoller in MTFavicon");
$u = $c->url;
} else {
favicon_debug("Error: MTFavicon called without a comment or trackback in context");
return $ctx->error("Error: MTFavicon called without a comment or trackback in context");
}
return favicon_return($u, $ctx, $args);
}
将以上加重的部分加入文件cgi-bin/mt/plugin/Favicon/favicon.pl 对应的位置即可。
如何使用Favicon?下面是一个例子:
<mt:Tags type="asset" sort_by="name">
<h2><mt:TagName></h2>
<MTSetVarBlock name="linktag"><mt:TagName /></MTSetVarBlock>
<ul class="links">
<mt:assets type="link" tag="$linktag" sort_by="$created_on" sort_order="ascent">
<li>
<MTFaviconIfAvailable>
<img src="<$MTFavicon$>" alt="Siteicon" title="Siteicon" height="16" width="16" />
</MTFaviconIfAvailable>
<a href="<mt:assetURL />" title="<mt:assetDescription />"><mt:assetLabel /></a><li>
</mt:assets>
</ul>
</mt:Tags>
其它插件
WidgetManager 遇到了一点小问题,升级过程仅仅将我自定义的Widgets 名称迁移到MT4,而下面包含的Module 信息丢失了,不得不手工又添加了一遍。
mt-varz 在MT4中内建了,如果将它留在MT4的plugins目录中,登录MT4管理界面会出错。
除此以外,我用到的其它plugins在MT4中都很正常:
- Collect 1.2
- Feeds.App Lite 1.01
- TagSupplementals 0.22
- mt-archive-dateheader
- 文章信息
- 版权声明: 本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息。
- 原文出处: http://www.aiview.com/
- 写于: 2009-07-13 [Edit]
- 作者: Alex (email &msn)

- 标签 Tags: Blogroll (2), favicon (2), linkroller (1), MT (25), plugin (8)


