用镜头记录,用心灵体验 | 订阅本站 | 所有笔记 | 亲和力设计 | 流量

DB2 学习笔记

博客话题:DB2,Linux,Web,业余无线电,户外,摄影,截拳道,Thankpad,其他

Movable Type

升级MT4 带来的plugins问题:Blogroll, LinkRoller, Favicon and etc

目录

  1. LinkRoller替代Blogroll
  2. Favicon
  3. 其它插件

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管理界面会出错。

MT4引入的所有plugins.

除此以外,我用到的其它plugins在MT4中都很正常:

  • Collect 1.2
  • Feeds.App Lite 1.01
  • TagSupplementals 0.22
  • mt-archive-dateheader

 

Alex's picture

my email address in picture

搜索|Search

评论|Recent Comments

按月归档|By Month

2009
07
2008
11
10
07
05
04
03
02
01
2007
12
10
07
06
05
04
03
02
01
2006
12
11
10
09
08
07
06
05
04
03
02
01
2005
11
10
09
08
07
04
03
2004
12
11
10
09
08
07
06
05
04
03
02
01
2003
12
10
09
08
06
2002
09
08
04
03
02
2001
12
09
07
06
05

我读|My Books

我的链接|My Links

我的朋友|My Friends

Creative Commons License
This blog is licensed under a Creative Commons License.
Movable Type 4 Logo