October 09, 2005

Comment Spam flood - 遭遇MT Spam洪水

有整一周没上blog里看消息了,一登陆,吓了一跳,136个comments! 第一感觉就是Spam! 打开评论管理一看,果然都是一些外国的留言,实质都是一些广告。

气愤之余,只好一条一条删除,但删除前,留一张截图吧,立此存照:

mt_comment_spam.PNG

看样子,迟点还是得装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分钟内就可以完成:

利用该方法生成的blog 样板可以看看:Extmail邮件开发博客

一些Links

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换成\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)