按照相似度排序的PJBlog“相关日志”实现方式
作者:笨花 日期:2008-05-04
你在看这篇文章时一定要看本文面对需求
不要看着代码似乎很多,其实需要改动的地方很少
为PJBlog添加相关日志显示功能,在我这篇文章之前就已经有很多人研究过了。像在PJBlog官方论坛就有WBC相关日志和静¢脉提供的插件:相关日志插件 FOR PJBLOG 2.7 080110修正。但是仔细研究这两篇文章,去除他们在页面上的表现不同外,其原理基本相似:以文章的tag作为关键字,根据tag来搜索相关日志再根据点击次数、回复次数或者发表、更新的时候来进行排序。这固然正确,也很好,但是却不是我想要的结果,或者说与我的需求不相符。
在开始讲怎么实现“相关日志”功能之前,我们必须先花一点时间来搞搞清楚我们的需求是什么,或者什么才是真正的相关日志功能。
需求:
相关日志就是一些具有相同关键字的文章,在PJBlog里我们把tag当作文章的关键字(具体请参见简简单单为PJBlog实现动态关键字),之前的两篇文章已经做到这一点了,也相当棒。本文的实现方法也依据tag来实现相关日志功能的;
关键是相关日志的排序问题。前面提到的两篇文章在相关日志的排序上都用了点击次数或者评论人数作为排序的依据,但是如果我们仔细想想看,如果有一篇文章的tag是“CSS,Web2.0”,另外还有两篇文章它们的tag分别是“CSS,xhtml”和“CSS,Ajax,Web2.0”,那么它们哪个前面会好呢?肯定是后者,因为他们的内容最相似,拥有两个相同的关键字,而前者只有一个关键字。对于正在浏览你文章的人来说,他之所以会花几分钟看你文章,那一定是他对文章中的内容感兴趣,那么他可能就会对和本文有类似内容的文章感兴趣(这也就是我们为什么把“相关日志”的标题写成“您可能还会对下面的文章感兴趣”了),所以你如果把这样的文章放在最前面他就有可能点击了。
还有一种情况就是,我经常写一个系列的文章,它们有1、2、3好几篇日志,因为他们是一个系列的文章,所以他们的关键字会完全相同,这样根据相似度排列“相关日志”后,当你浏览其中一篇的时候,其于的几篇文章就会显示在最前面,便于你连续查看(通过搜索引擎过来的访问者就有可能再点击其它文章)。
好了,我们在明确需求之后就可以定程序了(其实一个程序,需求部分占相当比重):
按相似度排序的“相关日志”功能的添加
1、下载RelatedArticle.asp文件,上传到PJBlog目录下的Common/文件夹下
2、修改article.asp,在头部加入引用
- <!--#include file="common/relatedArticle.asp" -->
3、找到
Dim id,tKey
在后面添加
- Dim tagsArr '输出相关日志时用到
找到
log_ViewArr=log_View.GetRows
其后添加
- tagsArr = log_ViewArr(19,0) '输出相关日志
保存。
4、打开class/cls_article.asp
找到
set getTag=Nothing
在其后添加
- showRelatedArticle tagsArr,id
保存
到这里,相关日志的显示功能已经实现了。现在我们要做的添加一点样式,让它在页面中的样子尽可以的好看一点。下面是我的样式,你可以根据自己的皮肤样式来定制。
5、定制样式。我们已经为dl元素添加了relatedArticles的id,这里就可以直接引用它了:
在skin/当前正在使用的皮肤/layout.css中添加:
- #relatedArticles{text-align:left; width:94%; line-height:1.5; margin:auto auto 20px; border:1px solid #ccc}
- #relatedArticles dt{font-weight:bold; line-height:1.5; background-color:#f5f7f7; padding:4px; border-bottom:1px dotted #ccc}
- #relatedArticles dd a{font-size:14px}
在skin/当前正在使用的皮肤/link.css中添加:
- #relatedArticles dd a:link,
- #relatedArticles dd a:visited {color:#069;}
- #relatedArticles dd a:hover,
- #relatedArticles dd a:active {color:#f00;}
保存上传。
至此,我们按照相似度排列的相关日志功能就已经实现了。
就如同前面据说的,每个修改都是根据不同的需求来实现的,你可以在WBC和静¢脉以及本方法中选择一个最适合你的来使用。
不足及有待改进
1、只能显示指定数目的相关日志,可以考虑翻页(个人太倾向这样);
2、所有完全相同tag的日志应该排在最前面,如文章的tag为1、2、3有两篇文章A的tag是1、2、3、4、5和B的tag是 1、2、3那么A和B谁应该排在前面呢?(个人倾向是B,它们有完全相同的tag);
3、其它未知;
补充
1、希望大家在写日志的时候要养成添加tag的习惯,而且tag的数量要适中,tag太少作用就是会很大,比如你给一篇文章只加一个tag:CSS,这很明显太宽泛,你不可能在一篇文章中讲全部CSS知识,你可能讲的是hack知识,也有可能是CSS的选择符等,因此CSS hack或者CSS Selector都可以用来作tag,而且他们更准确;
2、尽量使用已经存在的tag,在添加tag时先看看是否已经存在,例如tag中已经有了Javascript,你再用一个Jscript或者JS的话就会显得有点多余;
欢迎大家补充,并提出宝贵意见。
上一篇
下一篇

点击下载此文件
文章来自:
Tags:
相关日志: