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

DB2 学习笔记

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

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

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

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

 

Posted by Alex at 9:42 AM | Comments (0) | Edit | Taged: Blogroll (2), favicon (2), linkroller (1), MT (25), plugin (8)

MT3.34 升级至 MT4.26 数据库中文乱码的解决

上次升级MT是两年前的事情了,过程很顺利,这次就没那么幸运,遇到了字符集的问题,此外还有一些插件的问题,而且都比较棘手。 字符集的问题与虚拟主机有一定关系,数据存储在Dreamhost主机的mysql数据库中,3.34版本的数据库使用Dreamhost上Mysql默认的字符集Latin1,升级完成,切换到MT4.26之后,登录MT后台管理,数据库中所有的中文是乱码(问号),尝试了一个从前(MT3.34)的解决方法: 在文件 cgi-bin/mt/lib/MT/ObjectDriver/DBI/mysql.pm 中增加一行: $driver->{dbh}->do("SET NAMES 'utf8'");,这句代码告诉数据库,客户端和数据库连接都使用utf-8编码,数据库返回的数据也使用utf-8编码,但于事无补,乱码依旧。临时学习了一下Mysql处理字符集的机制,找到了一个解决方法:先将升级后(MT4.26)的数据导出,然后新建一个utf-8编码的数据库,最后导入数据即可。 导出数据:$ mysqldump -h HOSTNAME -u USERNAME -p DBNAME...

上次升级MT是两年前的事情了,过程很顺利,这次就没那么幸运,遇到了字符集的问题,此外还有一些插件的问题,而且都比较棘手。

字符集的问题与虚拟主机有一定关系,数据存储在Dreamhost主机的mysql数据库中,3.34版本的数据库使用Dreamhost上Mysql默认的字符集Latin1,升级完成,切换到MT4.26之后,登录MT后台管理,数据库中所有的中文是乱码(问号),尝试了一个从前(MT3.34)的解决方法: 在文件 cgi-bin/mt/lib/MT/ObjectDriver/DBI/mysql.pm 中增加一行: $driver->{dbh}->do("SET NAMES 'utf8'");,这句代码告诉数据库,客户端和数据库连接都使用utf-8编码,数据库返回的数据也使用utf-8编码,但于事无补,乱码依旧。临时学习了一下Mysql处理字符集的机制,找到了一个解决方法:先将升级后(MT4.26)的数据导出,然后新建一个utf-8编码的数据库,最后导入数据即可。

导出数据:

$ mysqldump -h HOSTNAME -u USERNAME -p DBNAME > DUMPFILE

Dreamhost中似乎无法命令行创建数据库,只能在Web phpMyAdmin中创建,Dreamhost的Mysql服务器参数character_set_server的默认值是utf8(从前是Latin1),可以用以下命令查看:

mysql> use DBNAME;
mysql> show variables like 'character_set_%';

如果不是utf8,可以用以下命令修改:

mysql> alter database DBNAME default character set utf8;

最后一步,导入数据:

$ mysql -h HOSTNAME -u USERNAME -p DBNAME < DUMPFILE

补充一下,查看了部分MT4的代码,在mt-config.cgi中设定: PublishCharset utf-8 应该相当于在应用程序中: SET NAMES 'utf8',而Dreamhost Mysql服务器目前与字符集有关参数的默认值如下:

+--------------------------+---------------------------------------------+
| Variable_name            | Value                                       |
+--------------------------+---------------------------------------------+
| character_set_client     | latin1                                      |
| character_set_connection | latin1                                      |
| character_set_database   | utf8                                        |
| character_set_filesystem | binary                                      |
| character_set_results    | latin1                                      |
| character_set_server     | latin1                                      |
| character_set_system     | utf8                                        |
+--------------------------+---------------------------------------------+

与客户端有关的几个参数默认值是Latin1(非utf8),而MT4的PublishCharset默认值与MT后台管理User的Language 设定有关,对于值English,其对应了编码utf-8,此时,可以省略mt-config.cgi中的PublishCharset设定。

有关插件的部分再单独讨论。

参考资料

Posted by Alex at 7:36 AM | Comments (0) | Edit | Taged: MT (25), upgrade (5)

升级Pentax *istDS 固件到V2.02

相机原固件版本是V1.00,最高支持1GB SD卡,更高容量的卡会被识别为1GB并可以正常使用。固件从V1.02 开始支持1GB以上,目前最新的版本是V2.02。 要查看当前固件版本,移除存储卡,按住Menu 键打开电源,查看液显即可。 先到官方网站下载*istDS 固件V2.02 ,升级之前先阅读一下指南。过程很简单,将下载的固件解出拷贝一个格式化好的SD卡内,插入相机,按住Menu 键打开电源,确认后即可进行固件升级,需要注意的就是保证电池有足够的电量,升级过程持续3分钟左右。 升级后将存储卡在相机中进行格式化,识别出完整的容量,另外原有的设置丢失,需要重新调整一遍。新的固件除了支持更高容量的存储卡(包括最新的SDHC),还带来了一些机身功能的升级。一切正常,手边没有闲置的8G卡,不知最高支持多大容量。 Pentax 其它型号相机的固件在这里查找。...

相机原固件版本是V1.00,最高支持1GB SD卡,更高容量的卡会被识别为1GB并可以正常使用。固件从V1.02 开始支持1GB以上,目前最新的版本是V2.02。

要查看当前固件版本,移除存储卡,按住Menu 键打开电源,查看液显即可。

先到官方网站下载*istDS 固件V2.02 ,升级之前先阅读一下指南。过程很简单,将下载的固件解出拷贝一个格式化好的SD卡内,插入相机,按住Menu 键打开电源,确认后即可进行固件升级,需要注意的就是保证电池有足够的电量,升级过程持续3分钟左右。

升级后将存储卡在相机中进行格式化,识别出完整的容量,另外原有的设置丢失,需要重新调整一遍。新的固件除了支持更高容量的存储卡(包括最新的SDHC),还带来了一些机身功能的升级。一切正常,手边没有闲置的8G卡,不知最高支持多大容量。

Pentax 其它型号相机的固件在这里查找。

Posted by Alex at 5:48 AM | Comments (2) | Edit | Taged: *istDS (1), firmware (1), Pentax (6), 固件 (1), 宾得 (6)

Alex's picture

my email address in picture

搜索|Search

订阅更新|Subscribe to Feed

评论|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

db2

我的链接|My Links

我的朋友|My Friends

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