在很多Drupal网站的首页都是显示内容的列表,这个列表可以用Views生成,可以根据不能的内容类型、字段、分类术语表等做出不同的列表,不过在有些时候列表的开头内容比较单调或者不具有代表性,我们以前就曾经设置一个偏移值,从中间开始显示,但这也不算一个很好的办法,曾经想过显示随机内容列表,可没有实现过。
这次在修改完善一把刀辞海网站的时候,又想到这个问题,先是准备自己用PHP编写一个随机数比对nid的程序来实现,但在网上搜索了一下,发现用Views非常容易:在排序(SORT CRITERIA)中添加Global: 随机 (Randomize)方式就可以了,注意“缓存”设置为“无”,Block caching设置为Do not cache。如下图:
首页上显示出来效果如下:
还可以根据不同网站的实际需要添加不同的字段来显示。这样普通用户打开首页看起来每次都有新鲜感,搜索引擎也可以在首页抓取到变化的不同内容。
除了用Views的办法来实现随机列表以外,还可以用SQL语句来进行,例如(我没有测试过):
<?php $result = db_query("SELECT nid FROM {node} WHERE type = 'story' AND status = '1' ORDER BY RAND() LIMIT 1"); if ($node = db_fetch_object($result)) { node_view(node_load(array("nid" => $node->nid, "type" => "story")), 1); } ?>
这段是Drupal 6中用的:
$query=db_query('SELECT nid, RAND() as _random FROM {node} WHERE status = 1 ORDER BY _random ASC LIMIT 1'); $result=db_fetch_object($query); 然后 drupal_goto('node/' . $result->nid); 或者 $node=node_load($result->nid); 等
评论