October 09, 2005
Comment Spam flood - 遭遇MT Spam洪水
有整一周没上blog里看消息了,一登陆,吓了一跳,136个comments! 第一感觉就是Spam! 打开评论管理一看,果然都是一些外国的留言,实质都是一些广告。
气愤之余,只好一条一条删除,但删除前,留一张截图吧,立此存照:

看样子,迟点还是得装SCode模块。
Posted by hzqbbc at 02:37 PM | Comments (1)
September 22, 2005
MT filename tweak - 调整MT生成blog的文件名
MT 2.x默认生成的日志文件名一般是/archives/yyyy/mm/0000134.html 这样的格式,而MT 3.x则有所改进,默认生成的是按标题的英文来生成的,例如本文的mt_filename_twe.html 这样子,截取前15个字节的内容。
但是想自定义文件名就得改动其Archives template了,虽然很早MT就提供了这个功能,不过一直却没想到用这功能。
本来想对mt进行修改,但mt本来是一个强大的系统,一定有解决方法的,于是google搜索到了不少方法,其中使用Brad Choate的MTIfemtry 插件的解决方法比较好。
利用该插件配合Keywords栏目,即可按自己的想法随意变更对应entry的文件名,方法如下:
将以下代码拷贝到Individial archives template里就可以了:
<MTIfEmpty var="EntryKeywords"><$MTEntryTitle dirify="1"$> </MTIfEmpty><MTIfNotEmpty var="EntryKeywords"> <$MTEntryKeywords dirify="1"$></MTIfNotEmpty>.html
注意:上述代码其实是在一行,为显示方便,我折成了几行,请使用时注意!
下载了MTIfempty之后,解包并将ifempty.pl拷贝到mt/plugins目录,然后Rebuild site即可。
不过重建entry之前,最好做一下清理工作,将archives里的老文章删除,这样就不会形成垃圾了。
如果希望保存老的文章并保证没有死链,那么就得辛苦一点,手工改动老文章里的链接了。
最后,再回顾一下,方法非常简单,10分钟内就可以完成:- 下载MTifempty
- 解包并将ifempty.pl放到plugins里
- 设置Archives template(参照上文)
- 重建所有文章
利用该方法生成的blog 样板可以看看:Extmail邮件开发博客
一些Links- http://www.elise.com/mt/archives/000286file_names_and_urls.php
- http://jade.mcli.dist.maricopa.edu/alan/archives/2004/01/12/archive_scheme.html
Posted by hzqbbc at 11:05 AM | Comments (0)
July 11, 2005
MT Related Entries Plugin - 新增相关文章的插件
一直以来都希望MovableType可以实现相关文章的功能,但官方似乎一直没有开发这种功能的意图。在MT的插件网站上找到一个叫MTRelatedEntriesByKeywords,能轻松支持相关文章功能。
使用方法非常简单,在Individial Archives模板中,增加下面的内容:
<b>Related Toptics | 相关文章</b></br> <MTRelatedEntriesByKeyword> <MTEntries> <li><a href="<$MTEntryLink$>"><$MTEntryTitle$></a> (<$MTEntryDate format="%Y/%m/%d"$>)</li> </MTEntries> </MTRelatedEntriesByKeyword>
安装
将relatedkeyword.pl拷贝到mt的plugins目录里即可。
配置好模板后,在每个文档的Keywords栏里输入相应的关键字即可,不过这个插件只支持以空格为分割符的关键字,我进行了小修改,使之支持了逗号(,)或空格来分隔关键字,并自动识别。
主要实现如下:
my $dim = '\s+'; # XXX
$dim = '\s*,\s*' if($entry->keywords =~ /,/);
my @ekey = split (/$dim/, $entry->keywords);
......
另一个插件:RelatedEntryKeywords
该插件是根据RelatedEntriesByKeywords插件实现的,功能非常简单,可输出每个文档的关键字,这样可以方便的对关键字处理,包括Link或搜索等。
目前利用这个小插件实现了每个关键字的搜索,从而提高一点Google Adsense的展示量:-)
主要代码如下:
#!/usr/bin/perl
#
# GetEntryKeywords - by He Zhiqiang<hzqbbc@hzqbbc.com>
#
use strict;
use MT::Template::Context;
#use MT::Entry;
my $plugin;
eval {
require MT::Plugin;
$plugin = new MT::Plugin({
name => 'Get Entry Keywords',
description => 'A plugin for listing entry keywords/tags, very simple.',
doc_link => 'http://www.hzqbbc.com/blog',
author_name => 'He Zhiqiang',
author_link => 'http://www.hzqbbc.com',
version => '0.01'
});
MT->add_plugin($plugin);
};
MT::Template::Context->add_container_tag (RelatedEntryKeywords => \&get_keywords);
MT::Template::Context->add_tag(ThisKeyword => \&this_keyword);
sub get_keywords {
my ($ctx, $args) = @_;
my $dim = '\s+'; # XXX default dim
my $res = '';
my $blog_id = $ctx->stash ('blog_id');
my $entry = $ctx->stash ('entry')
or return $ctx->error("No entry found.");
return "" if (!defined $entry->keywords);
$dim = '\s*,\s*' if($entry->keywords =~ /,/);
my $builder = $ctx->stash ('builder');
my $tokens = $ctx->stash ('tokens');
my @keys = split (/$dim/, $entry->keywords);
foreach my $key (@keys) {
$ctx->stash ('this_keyword', $key);
defined(my $out = $builder->build($ctx, $tokens))
or return $ctx->error($ctx->errstr);
$res .= $out;
}
$res;
}
sub this_keyword {
my $ctx = shift;
$ctx->stash ('this_keyword');
}
Posted by hzqbbc at 09:18 AM | Comments (1)
April 09, 2005
今天改了改MT样式表,舒服了一点
自从决定给自己也搞个Weblog之后,就开始盘算怎么样搞得好一点。而Weblog自然要有好的Web appearance,样式表是少不了的了。
MT默认的样式表显然不能满足我的要求,对于中文字而言,x-small太小了,我都改成small了,换了banner的颜色,页面的背景。至于Blog的名称,想来想去也没啥好idear,暂且叫Zhiqiang::He吧,description就现在这个了。
Happy + Health = Life^2 寓意:生命的平方=快乐+健康
不过发现一个小问题,装了Textile 之后,发文的速度明显慢了,估计是巨大的Textile库及codebeautifier 吃掉了大量的CPU资源,本想装个mod_perl来提速的,结果发现apache2的mod_perl要么版本太低,要么Apache::Test太低,晕!结果还是算了,有空将weblog转移到CNC的服务器时再说吧。
今天大概就先搞成这个样子了。:-)
Posted by hzqbbc at 09:00 AM | Comments (0)
April 08, 2005
使MT支持代码高亮功能
介绍 对于喜欢写写code的人,不能在CMS里显示代码高亮是非常遗憾的,之前我本来想做个MT的插件,调用vim来实现高亮,但后来发现有一个叫MTcodebeautifier 可以实现类似功能。于是下载了,并下载了MTTextile一并安装. 但按照readme设置后,死活有问题: 1)如果发文时选Convert break line 就会在code里将\n换成 br>\n很不爽 2)如果加了<pre>又变不了彩色 3)做了一下其他设置,又无法高亮(虽然已高亮,但所有的html代码都给entites了!) 安装调试 主要参考: a.http://www.superluminal.com/dave/weblog/archives/000361.html a.http://www.bradchoate.com/mt/docs/mtmanual_textile2.html a.http://www.joangarnet.com/blog/archives/2004/11/instalacian_de.php 我的做法: 安装了MTcodebeautifier + MTTextile(都是最新版)后,不需要有任何配置(建议不需要任何配置),发文的时候注意几点即可: 1)使用==标记(MTTextile里的,详细见手册)将代码块闭和包裹,该标记的意思是不需要进行Textile转换,sample:== <pre> <code language="perl"> use strict; print "Hello world, i'm in MT now!\n"; </code> </pre> ==2)发文时转换格式选None (即不使用任何转换) 3)注意==(escape)标记要被空行包裹(newline)即:
newline == 及 == newline该注意事项详见mttextile2手册。 总结 其实原理大致是这样的:首先
block 激活了Mtcodebeautifier,对block里的字符进行高亮显示,显示完后,如果转换格式选Textile_2的话,由于高亮显示后的流是html,所以会对诸如<>;等进行转换,导致输出的信息变成了痛苦的烂code!!:)
Posted by hzqbbc at 01:57 AM | Comments (0)
April 07, 2005
安装并调试好了MTcodebeautifier+MTTextile
今天终于调试通过了MTcodebeautifier + MTTextile 了,感觉还行,但是不够强大,迟点再改写好,尽量贴近vim的解析效果:)
以下就是一小段perl代码的示例:
#!/usr/bin/perl -w
use strict;
use FCGI;
use vars qw($cnt);
$cnt = 0;
while(FCGI::accept()>=0) {
print "Content-Type: text/html\n\n";
print "This is the $cnt request!</br>\n";
}
再来看看php的示例:
<?PHP
/* PHP 示例 */
echo "This is php demo";
?>
是不是很Cool? 但还不够cool..接下来有时间就改造之..
Posted by hzqbbc at 07:02 PM | Comments (0)