« 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