Skip to Content

【Drupal】基于分类 taxonomy 实现相关文章 Related Post

对于偏内容型站点来说,相关文章(Related Post)成为留住游客从而降低访客跳出率的重要手段,虽然在 Drupal 中默认是没有此类功能但 Drupal 本身为我们提供了很多丰富的 API 接口使我们可以借助分类 taxonomy 的一些接口很容易的通过修改主题模板 Theme 为 Drupal 站点添加诸如 相关文章 类似文章 推荐内容 等功能…… 

代码可放入相应节点类型的 node.tpl.php 具体如下:

1
2
3
4
5
6
7
8
9
10
11
12
 
$title = 'Related Post :';
$items = $atids = array();
 
foreach($node->taxonomy as $term){ $atids[] = $term->tid; }
 
$datas = taxonomy_select_nodes($atids, 'or');
while ($data = db_fetch_object($datas)){
$items[] = l($data->title, 'node/'.$data->nid);
}
 
echo theme('item_list', $items, $title, $type = 'ul');

代码非常简单首先是获取该节点所有术语标签 term 的 tid 然后使用 drupal 提供的 taxonomy_select_nodes 函数直接取得站点内所有含有相同术语的 node 节点重组为一个数组交给 item_list 主题函数输出即可。

方法比较简单所有算法肯定也会比较弱智,单纯的根据术语标签(term)来推荐相关文章会导致推荐内容不准确,如果能使用更高级的算法当然最好。还 有就是不能自由选择参与相关文章的节点类型(node type)你肯定不想所有节点类型参与相关文章,我的做法是在为 $items[] 赋值之前用 node_load 读取 nodeType 并判断,但这同时也消耗大量资源和牺牲站点性能本身 taxonomy_select_nodes 就不是省油的函数,所以我也在开篇就表示该方法更适用于偏内容型站点,该类站点多为游客访客用户可以开启站点缓存节点不用每次都执行多次查询,对于非缓存 站点该方法并不推荐。

当然我觉得最好的方法还是使用更智能高级的算法根据节点标题、术语、内容等参数并施以不同的权重,直接读取数据库生成相关文章会好的多,类似 WordPress 上的 YARPP 模块就做的非常智能!

 

本文转载自:http://anyliv.com/blog/1207.html