在页面中添加一个随机文章列表的好处是降低站内页面相似度,避免对搜索引擎将页面当做复制页面来处理。我的QQ代码站,这个站就是这种情况。那么要实现的功能是:输出一个随机文章列表,每次生成HTML页面时,列表都不相同,每个页面的列表也各不相同,当然,如果不生成静态的话,那么每次刷新页面,列表也会变化。
动易SiteWeaver本身没有提供生成随机文章列表的功能,也没有相关的插件,要实现这个功能只能使用动易的自定义标签了,下面提供两种版本,Access版的和SQL版的,SQL版的是引用动易论坛小码哥所写的。
一、动易SiteWeaver+SQL数据库实现随机文章列表:
在后台自定义标签管理里新建一个函数标签:
标签名称:{$MY_随机文章} -可自定义标签名称
查询语句:select top 10 ArticleID,ClassID,Title,UpdateTime from PE_Article where ChannelID in ({input(0)}) and ClassID in ({input(1)}) and DateDiff(day,UpdateTime,getdate())<7 and Deleted=0 and Status=3 Order by newid()
标签内容:{Loop}{Infobegin}{$Field(2,Text,22,2,1)}
{Infoend}{/Loop}
调用方法:在模板里适当位置加入:{$MY_随机文章(频道ID,栏目ID)}即可,频道ID,栏目ID根据自己实际修改。
说明:
1、select top 10.... 中的10是要查询的文章数,可以自己改,但建议不要改的太大。
2、如果不想按栏目调用,而是调用某一个频道下的文章,那么可以把ChannelID in ({input(0)}) and ClassID in ({input(1)}) 修改为:ChannelID in ({input(0)}) ,相应的,调用标签就是:{$MY_随机文章(频道ID)}了。
3、DateDiff(day,UpdateTime,getdate())<7....中的7是指查询最近7天的文章,根据你的需要修改。
二、动易SiteWeaver+Access数据库实现随机文章列表:
在后台自定义标签管理里新建一个函数标签:
标签名称:{$MY_随机文章}-可自定义标签名称
查询语句:select top 10 ArticleID,ClassID,Title,UpdateTime from PE_Article where ChannelID in ({input(0)}) and ClassID in ({input(1)}) and DateDiff("d",date(),UpdateTime)<7 and Deleted={$PE_False} and Status=3 Order by right(cstr(Rnd(-int(ArticleID+rnd(-timer())*100)))*1000*Now(),2);
标签内容:{Loop}{Infobegin}
{$Field(2,Text,44,2,1)}
{Infoend}{/Loop}
调用方法:同上。
说明:同上。
在access中实现随机真是太麻烦了,这个标签的核心句子是:Order by right(cstr(Rnd(-int(ArticleID+rnd(-timer())*100)))*1000*Now(),2)这一句,在SQL中一个函数就能实现的东西在access中却要套这么多层,不过这个句子保证了随机性,具体效果可以看我这个栏目下的文章页http://www.ttome.com/qzcode/。
要说明的是:好的效果实在损失性能的前提下实现的,这句代码效率很低,所以如果生成大量静态页面,建议在访客较少的时候进行。一次尽量少生成一些,或者你也可以修改动易安装目录下的Config.asp文件中的:
Const MaxPerPage_Create = 10 '一次生成的数量,把他改小一些。
Const SleepTime = 3 '生成的间隔时间,把他改大一些。
又或者你不是很在乎每篇文章的随机性,那么你可以精简“Order by right(cstr(Rnd(-int(ArticleID+rnd(-timer())*100)))*1000*Now(),2) ”,期待高手写出效率更高的句子,或者直接写个插件出来,呵呵。