« OpenSource APF Server Plan - 开源(GPL) APS计划 | Main | Power of New Tech - “乌合之众”的力量 »

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。
本文网址:http://www.hzqbbc.com/blog/arch/2005/07/mt_related_entr.html
 

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 July 11, 2005 09:18 AM

Comments

hi,Zhiqiang兄
我下载了并安装了RelatedEntryKeywords,但有一个问题,关键字怎么添加呢?
日记编辑页面中没有关键字添加的地方啊
请拨冗解答一下,谢谢。^^

Posted by: 黑羽 at May 14, 2006 02:09 AM

Post a comment




Remember Me?

(you may use HTML tags for style)