drupal中定制自己的相关文章列表

预备条件:

* Drupal 6.x (其他版本也可以参考)
* 启用Search模块
* 启用CSplitter模块
* 启用Taxonomy模块,并且文章中设置了Tag或Taxnomy(相关文章的检索条件)

步骤:

本人做Drupal不专业,写的东西可能不太好看,也可能还有更好的方法,在此请高手多多指导:) 我实现相关文章的功能实际上是创建了一个Block,里面写了几行代码,调用了do_search api实现的,代码的具体逻辑为,读取当前页面node,再获取其Taxonomy,然后调用do_search API获取搜索结果,将结果中的node列出来,具体步骤如下。

1. 创建一个Block。创建Block的路径是 管理->站点创建->区块,页面上方有一个“增加区块”的链接。

2. 区块说明:related_articles;区块标题:以下文章可能对您有所帮助,这两个其实都可以随便填,需要注意一下区块标题,如果你只是填写一个“相关文章”,可能对读者的吸引力不够,这个就看你如何吸引读者的眼球了。
3. 区块内容:放置php代码,并将输入格式设置为PHP Code,需要注意的是,你需要启用模块中的PHP Filter,否则你是看不到PHP Code,PHP代码如下:
<?php
//$current_node用来存储当前页面上的node
//$current_node用来存储当前页面上的node的关键字
$current_node = node_load(arg(1));
$current_terms = taxonomy_node_get_terms($current_node );
//$current_keyword用来存储合成的关键字(用于Drupal do_search API调用,检索相关文章)
$current_keyword = '';
//将关键字连接起来,用'OR'连接,如果直接用空格连接表示与的关系
foreach ($current_terms as $local_kw)
{
$current_keyword .= $local_kw->name;
$current_keyword .= ' OR ';
$current_keyword .= ' ';
}
//去掉前后空格
$current_keyword = trim($current_keyword);
//字符串长度
$keylength = strlen($current_keyword);
//Drupal API do_search的关键字长度大于2才执行搜索,这个设置与搜索设置中的最小关键字长度设置有关
if($keylength > 2)
{
//$related_results保存的是通过drupal API do_search查询结果,结果就是相关文章
$related_results = do_search($current_keyword, 'node', $join1 = '', $where1 = '1 = 1', $arguments1 = array(), $columns2 = 'i.relevance AS score', $join2 = '', $arguments2 = array(), $sort_parameters = 'ORDER BY score DESC');
//格式化相关文章标题及链接为ul列表
$output .= '

    ';
    foreach ($related_results as $local_item){
    $related_results = node_load($local_item->sid);
    if($current_node->nid <> $related_results->nid)
    {
    $linkurl = url("node/$related_results->nid", array('absolute' => FALSE));
    $output .= '
  • ';
    $output .= "";
    $output .= $related_results->title;
    $output .= '
    ';
    $output .= '
  • ';
    }
    }
    $output .= '

';
}
//输出
print $output;
?>
4. 设置页面可见性:只在下列页面中显示,设置值为:node*
5. 保存区块
6. 在管理区块页面将区块放在content部分,区块将出现在内容最下方
7. 由于相关文章功能对搜索功能有所依赖,如果你还没有为站点内容创建索引,那么赶快创建吧
8. 效果如下,下面的链接来自于如何制作手机播放的RMVB格式电影这篇文章,本文最后也有相关文章列表。
以下文章可能对您有所帮助
* 如何用Windows Mobile手机播放RMVB电影 终极版——图解教程+软件下载
* 如何应对网络诈骗
* 如何安装电脑系统:Windows xp篇
* 如何下载
* 如何打开ivm格式的文件
* 如何建立自己的独立博客
* 如何重装操作系统(菜鸟必看,高手免进)
* 如何清理键盘
* 如何快速下载和安装软件
9. 其他可用模块
* Relevant Content
relevant_content模块使用了一个Select SQL实现的查询,没有使用Search模块,也没有使用do_search API,自然也就不能对中文分词支持了,搜索结果也没有按照相关度排序,所以“相关”并非很准确。
* Similar Entries
similar entry找到的相关内容比较少,但是结果顺序和本文的方法是一样的,similar entry一样没有用do_search api,对中文分词支持不好,因此也有一些缺憾。
* Relevance
relevance模块比上面两个都要好一些,还可以根据Taxonomy、日期、时间等因素设定权重,结果还可以显示性能相关数据,relevance 模块虽然没有直接使用do_search API,但是其中的SQL仍然按照relevance度排序,只是不支持中文分词。推荐使用此模块。
(文章来源:http://zaban001.com/node/61

taxonomy: