实现dedecms完全随机调用不同文章的原理
用过织梦的人都知道,织梦CMS很适合做资讯站,生成静态网页以后,一个小小的虚拟主机都能拉动上万IP的资讯站,这是静态网页的好处,只占用带宽,而虚拟主机共享带宽让你有机会用充足的带宽。
不过,生成静态网页以后,网页中调用的文章标题会固定,好比推荐文章、最近更新文章,同时更新的网页调用的文章标题都相同,这让搜索引擎很容易发现推荐文章、最近更新文章,从而收录这部分网页;如果是更新很久的文章,便没有机会再次让搜索引擎发现,之前没被收录,现在同样不被收录。
为解决这个问题,可以采用随机调用文章的方法来实现;随机调用文章的方法很简单,随机从某个栏目或者全站调用指定数量的文章,再随机排序即可。其中,typeid表示栏目ID,row表示要调用的数目,titlelen表示标题的长度,orderby表示排序规则,这里rand便是随机。
{dede:arclist typeid='2' row=‘12’ titlelen='60' orderby='rand'}[field:pubdate runphp='yes'] $a="";$b=""; $c=strftime("%m/%d","@me"); $ntime = time(); $oneday = 3600 * 24; if(($ntime - @me)<$oneday) @me = $a.$c.$b; else @me =$c; [/field:pubdate]·[field:title/]{/dede:arclist}
上面这段代码即可实现随机调用文章标题。不过,随机对所有同时更新的网页都有效,简单来说所有网页随机取到的结果都一样,是12篇相同的文章标题,只是后面的排序有所不同,好比一个网页调用出来的顺序是:文章A、文章B、文章C,而另一个网页调用出来的顺序是:文章C、文章A、文章B。
对于搜索引擎来说,这种随机调用出来的文章标题没多大意义,还是不能让搜索引擎发现更多的文章;如果你的网站权重不够高,搜索引擎没那么多时间按照“上一篇、下一篇”文章的顺序来爬遍你的文章,所以要让每个网页随机调用出来的文章标题不同,这样让更多网页有机会被搜索引擎爬过。
要实现真正的随机调用,我们可以这样考虑,先随机调用10000个网页,对同时更新的网页而言,随机调用到的都是10000篇文章,只是排序有所不同;既然排序有所不同,我们取排在最前面的12篇文章即可,这样便可以真正实现随机调用12篇文章标题。下面是实现完全随机地调用文章的代码。
{dede:arclist typeid='2' row=‘12’ titlelen='60' orderby='rand'}[field:pubdate runphp='yes'] $a="";$b=""; $c=strftime("%m/%d","@me"); $ntime = time(); $oneday = 3600 * 24; if(($ntime - @me)<$oneday) @me = $a.$c.$b; else @me =$c; [/field:pubdate]·[field:title/]{/dede:arclist}
上面的typeid表示栏目,栏目ID为2,如果不限制栏目,全站随机调用,那么把2修改为rand即可;pagesize这个标签原本出现在列表页,按规则对列表页文章进行排序,放到内容页位置,同样有效。这些测试在dedecms v5.6和5.7版本中有效,至于更早的版本,目前没有做过测试,不清楚有没有效。
{dede:arclist typeid='2' row='10000' pagesize='12' titlelen='60' orderby='rand'}[field:pubdate runphp='yes'] $a=""; $b=""; $c=strftime("%m/%d","@me"); $ntime = time(); $oneday = 3600 * 24; if(($ntime - @me)<$oneday) @me = $a.$c.$b; else @me =$c; [/field:pubdate]·[field:title/]{/dede:arclist}
我们可以进一步实现typeid的随机调用,实现每个网页都随机调用到不同的文章,你的文章数目越多,可以把row的数值设到越大,这样全站更新后,随机调用到的结果会更丰富;另外,建议一个网页有一个随机调用文章的区域即可,同时还有推荐文章、相关文章,这样会让搜索引擎发现你推荐文章的同时,发现部分老文章,从而让网站收录率更高。