dudo 2008-4-24 14:50
简简单单为PJBlog实现动态关键字
[color=red]原文:[url]http://www.dudo.org/article.asp?id=201[/url][/color]
[b]引子:[/b]在PJBlog中,一旦在header.asp中设定了关键字,那么全站所有页面都会共用这些关键字。这样存在的问题就是,如果你有两篇文章,他们内容毫无相似之处,这样的两篇文章共用相同的关键字对于搜索引擎来说是不好的。我的博客经常有技术性的文章,也有生活中的文章,如果在有关旅游见闻的文章里出现asp、css一类的东西不太好吧?对于搜索引擎来说,无用关键字关降低排名和索引量。因此,希望PJBlog的下一个版本中能够实现自定义关键字。在此之间我们先简单修改程序实现“动态关键字”。
[b]所谓的“动态关键字”,[/b]就是在article页根据页面内容的不同而在<head />中间变化<meta keywords />的内容。
[b]基本原理:[/b]对于PJBlog的更改我的一个基本原则就是不改变数据库的结构。而文章所对应该的tag往往又是对文章来说比较重要的信息,因此,完全可以配合tag和预定关键字来实现每篇文章的关键字动态变化了。
明白了基本原理,再来修改就很容易了。不过我们要注意Tag在原有程序的调用中要通过大括号{}和数字组合如{31},后转换成html格式的。在<meta />中,html格式是不允许出现的,此外,不同的关键字之间要用半角的逗号“,”隔开等等。
需要修改的文件只有两个:header.asp和article.asp。
下面我们看具体的修改步骤:
[b]第一步:修改header.asp文件[/b]
在header.asp中,找到下面一行代码:[code]'输出文件头
sub getBlogHead(Title,CateTitle,CateID)
... ...
end sub[/code]这段代码是向页面输出头文件的。所有的可视页面都会用到这个文件,因此为了保证其他页面的正常使用,我们需要把这段代码重新复制一下,并把子过程名称命名为re_reBlogHead,然后再增加一个新的参数keyWords,将html代码中的<meta />标签赋于keyWords变量,修改如下(这里除了变量外,还保留了几个静态的关键字):[code]sub re_getBlogHead(Title,CateTitle,CateID,keyWords)
... ...
<meta name="keywords" content="Dudo Says,dudo's Blog,<%=keyWords%>" />
... ...
end sub[/code]保存文件格式为UTF-8、上传文件。
[b]第二步:修改article.asp文件[/b]
article.asp是最终输出文件,在这里他会调用到header.asp。查找下面的代码[code]re_getBlogHead BlogTitle,getCate.cate_Name,getCate.cate_ID[/code]把他替换为我们在header.asp中新增的头文件函数:[code]re_getBlogHead BlogTitle,getCate.cate_Name,getCate.cate_ID,reKeyWords[/code]然后在这行代码的上面给reKeyWords赋值(这里之所以用reKeyWords作变量名是因为为keyword和keywords已经被占用,你在修改时一定要注意你所定义的变量不会和原程序冲突)。[code]'获取Tag作为关键字
Dim getTag,reKeyWords,re '定义变量
Set getTag=new tag '实例化tag类
reKeyWords = getTag.filterHTML(log_ViewArr(19,0)) '取得带有html标签的tag
reKeyWords = Replace(reKeyWords,"</a> <a","</a>,<a") '将中间的空格换为半角逗号“,”
Set re=new RegExp
re.IgnoreCase =True
re.Global=True
'过滤掉HTML标签
re.Pattern = "<.*?rel.*?>(.*?)<\/.*?>"
reKeyWords = re.Replace(reKeyWords,"$1")
re.Pattern = "<.*?>(.*?)<\/.*?>"
reKeyWords = re.Replace(reKeyWords,"$1")
Set getTag = Nothing
Set re = Nothing[/code]保存为UTF-8格式,上传。
这样我们基本上实现了为每个页面定义不相同的关键字了。不过这里还要提醒大家要养成一个为文章加tag的好习惯。
如果修改过程有什么问题或者您有更好的改进办法,请给我留言。
另:我在PJBlog 2.5上修改过一次没有成功,但在2.7Build 05上成功了,[color=red]大家在修改之前一定要对原文件进行备件[/color]。
[[i] 本帖最后由 dudo 于 2008-4-24 19:19 编辑 [/i]]
dudo 2008-4-24 14:52
任何问题可以到我的博客[url]http://www.dudo.org/[/url] 提出,我每天都会去看的。
也可以在这里提出,我会定期来这里,可能就是等待的时间稍微长一点。:loveliness:
wbq122 2008-4-28 18:43
有个问题,
在我的文件中没有这段代码[code]re_getBlogHead BlogTitle,getCate.cate_Name,getCate.cate_ID[/code]但是有这个[code]getBlogHead BlogTitle,getCate.cate_Name,getCate.cate_ID[/code]下面怎末改???
直接替换?去掉“re_”?
[[i] 本帖最后由 wbq122 于 2008-4-28 18:47 编辑 [/i]]
linsuxian060 2008-4-28 21:49
:funk: 感觉有点复杂
lilinrong 2008-4-29 08:22
不错,支持了
huhaisen 2008-5-1 21:01
嗯,楼主这个方法确实不错。而且TAGS不会像另一种修改方法那样失效。不过head.asp重复大量的代码不知道效率会不会受到影响?
不过楼主叙述的太详细太深奥了
修改起来很简单,只在两处简单的加上代码即可
修改不成功的朋友看我写的步骤:
[url=http://www.weike365.cn/article.asp?id=663&pages=2]http://www.weike365.cn/article.asp?id=663&pages=2[/url]
[[i] 本帖最后由 huhaisen 于 2008-5-1 21:02 编辑 [/i]]
zqjilove 2008-5-1 22:40
回复 9# 的帖子
我也没由你说的那个啊,,能告诉我怎么修改吗
omegabomb 2008-5-21 14:07
为什么我改了以后出现这个错误:
Microsoft VBScript runtime '800a0009'
Subscript out of range: '[number: 19]'
/article.asp 50
-------------------50行--------------
reKeyWords = getTag.filterHTML(log_ViewArr(19,0)) '取得带有html标签的tag
-----------------------------------
这句中的19是什么意思????
beike 2008-6-9 10:15
[quote]原帖由 [i]omegabomb[/i] 于 2008-5-21 14:07 发表 [url=http://tel.pjhome.net/redirect.php?goto=findpost&pid=249587&ptid=33605][img]http://tel.pjhome.net/images/common/back.gif[/img][/url]
为什么我改了以后出现这个错误:
Microsoft VBScript runtime '800a0009'
Subscript out of range: '[number: 19]'
/article.asp 50
-------------------50行------- ... [/quote]
如果你开启了静态日志功能,这个功能是不可以的,他们都不说,不厚道!!!害得我们费了半天劲才弄明白,把博客都搞乱了。唉,技术垄断啊,哈哈
omegabomb 2008-6-18 14:07
[quote]原帖由 [i]beike[/i] 于 2008-6-9 10:15 发表 [url=http://bbs.pjhome.net/redirect.php?goto=findpost&pid=256043&ptid=33605][img]http://bbs.pjhome.net/images/common/back.gif[/img][/url]
如果你开启了静态日志功能,这个功能是不可以的,他们都不说,不厚道!!!害得我们费了半天劲才弄明白,把博客都搞乱了。唉,技术垄断啊,哈哈 [/quote]
谢谢了,真的是这个原因!:handshake
jogocun 2008-8-6 19:41
翻开老帖,郁闷下,我站自从加了这个效果,顶级域名就白百度K了,没这么巧吧?