使用Tagwire之后发现,如果不将Tags和分类直接联系起来,Technorati收录的很慢,如果按照Technorati的方式,用分类做Tags的话就收录的很快。为此,从新考虑使用Tags(keyword-to-tag)插件,但安装之后发现,该插件无法正确的处理中文,使用Movable Type一类带空格的标签也不方便。特别是在设置中文Tags时,插件不自动将全中文的Tags创建为分类这一点是致命的。但考虑到原来的Tagwire使用的很好,目前只需要一个能够将自己设定的Tags都创建为分类的插件,没有什么比这个插件更合适的了,所以最终决定改一下代码。
1、编辑Tags插件的“tags.pl”文件,将tag_split子程序中while ($str =~ m/("[^"]+"|'[^']+'|[^ ;,]+)/g)匹配分割符号的正则式中最后一个方括号中的空格删除掉,让插件不将空格作为多个标签的分割符合。
2、将tag_split子程序中next if $tag =~ m/^\W+$/;一行注译掉,使插件不在发现标签不是由数字、26个英文字母或者下划线组成的字符串时跳过,以便能够支持我们需要的中文标签。
修改前
sub tag_split {
my ($str) = @_;
$str =~ s/(^\s+|\s+$)//gs;
my @tags;
while ($str =~ m/("[^"]+"|'[^']+'|[^ ;,]+)/g) {
my $tag = $1;
next if $tag =~ m/^\W+$/;
$tag =~ s/[ ;,]+$//;
$tag =~ s/^"(.+?)"$/$1/;
$tag =~ s/^'(.+?)'$/$1/;
push @tags, $tag if $tag ne '';
}
@tags;
}
修改后
sub tag_split {
my ($str) = @_;
$str =~ s/(^\s+|\s+$)//gs;
my @tags;
while ($str =~ m/("[^"]+"|'[^']+'|[^;,]+)/g) {
my $tag = $1;
# next if $tag =~ m/^\W+$/;
$tag =~ s/[ ;,]+$//;
$tag =~ s/^"(.+?)"$/$1/;
$tag =~ s/^'(.+?)'$/$1/;
push @tags, $tag if $tag ne '';
}
@tags;
}
改好之后,将“Tags.pl”上传到“plugins”目录下,在Movable Type插件设置中启动它,接下来就可以开始编辑文章,为文章添加Tags了。Tags添加的方法很简单,只需要在编辑文章中的“关键字”(标签)处输入就可以了,插件将自动将当中还没有建为分类的标签自动创建为分类,注意“关键字”输入框默认不在创建新文章的页面上打开,你可以先单击创建新文章页面各编辑输入框下方的“自定义显示此页”打开它,方便以后编辑文章时加上标签。
不过真正用起来后还有一些问题是需要解决的,首先分类太多太乱是一个问题,因而,我在分类中建一个名称为“Tags”的分类,这样当插件自动将我们设置的标签转为分类时,将把它们都建为该分类的子分类。但是这样做,仍然无法改变在首页上显示过多分类的问题,所以决定再添一个过滤分类插件,最终选择了比较决定的FilterCategories,该插件只有一个文件,上传到“plugins”目录下就可以了。上传后首先 修改主索引模板(Index.html),利用FilterCategories我设置了在生成分类链接时只保留几个主要的分类。
修改前
<MTTopLevelCategories> <MTSubCatIsFirst><ul class="module-list"></MTSubCatIsFirst> <MTIfNonZero tag="MTCategoryCount"> <li class="module-list-item"> <a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"> <MTCategoryLabel></a> <MTElse> <li class="module-list-item"><MTCategoryLabel> </MTElse> </MTIfNonZero> <MTSubCatsRecurse> </li> <MTSubCatIsLast></ul></MTSubCatIsLast> </MTTopLevelCategories>
修改后
<MTCategories show_empty="1"> <MTFilterCategories include="道听途说|站点制作|网络体验|软件精解|硬件前沿|电脑医院"> <ul class="module-list"><li class="module-list-item"> <a href="<$MTCategoryArchiveLink$>"> <$MTCategoryLabel$></a></li></ul> <$MTCategoryDescription$> </MTFilterCategories> </MTCategories>
最后,既然为了Technorati收录加快,必须考虑是否修改Atom和RSS 2.0模板,使每个文章能够显示多个分类。当然,由于文章中显示分类信息是一个一个分类名称显示的,同样的需要过滤掉Tags分类,否则每个标签都是它的子分类,每次Tags都出现一次可不好。下面是atom.xml 模板和RSS 2.0 的模板修改方法。
atom.xml修改前
<MTEntryCategories>
<category term="<$MTCategoryLabel encode_xml="1"$>" />
</MTEntryCategories>
atom.xml修改后
<MTEntryCategories> <MTParentCategories> <MTFilterCategories exclude="Tags"> <category term="<$MTCategoryLabel encode_xml="1"$>" /> </MTFilterCategories> </MTParentCategories> </MTEntryCategories>
index.xml修改前
<category> <$MTEntryCategory remove_html="1" encode_xml="1"$> </category>
index.xml修改后
<MTEntryCategories>
<category>
<MTParentCategories>
<MTFilterCategories exclude="Tags">
<MTCategoryLabel encode_xml="1">
</MTFilterCategories>
</MTParentCategories>
</category>
</MTEntryCategories>
另外,对于还有RSS 1.0模板的用户,可以按以下方式修改
RSS 1.0 index.rdf模板修改前
<dc:subject><$MTEntryCategory encode_xml="1"$></dc:subject>RSS 1.0 index.rdf模板修改后
<MTEntryCategories> <dc:subject> <MTParentCategories> <MTFilterCategories exclude="Tags"> <MTCategoryLabel encode_xml="1"> </MTFilterCategories> </MTParentCategories> </dc:subject> </MTEntryCategories>
