国外设计欣赏网站 - DOOOOR.com

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,微信登陆

搜索

[Drupal问题] Drupal:实现“相关文章”功能详细设置教程

[复制链接]
发表于 2-16-2012 23:31 | 显示全部楼层 |阅读模式
预备条件:
# b( |! q( H4 `+ F: Z% D1 ^) A9 }; P$ N! y  f2 W' H
, c1 M- t% b# K4 }" K! p) k$ a1 s

0 P* n2 _& y8 c+ `' W
    2 m% h% {. [2 W
  • Drupal 6.x (其他版本也可以参考)
    * [4 G+ s: b9 r
  • 启用Search模块
    # ~( ~1 ~( H7 b( i
  • 启用CSplitter模块8 z% m7 ^( ?  Z) d# {
  • 启用Taxonomy模块,并且文章中设置了Tag或Taxnomy(相关文章的检索条件)  q  @! x3 m/ g: i" x+ P

    ' x% N8 J8 j" \- g0 Y
2 A6 V7 A& V2 z) }* |5 [" \) y/ s
* U+ k( ]$ o6 Y, o- ~# C

' P8 H$ Y' e+ a) M! o" B! c3 Q; c1 Q2 ~& K5 k. }! F
4 D( V, G. n$ `5 u# g
& m: H. N1 M5 M# N$ J- Y1 a
/ U6 y' S6 m) u4 ?

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

& f, G: H$ q6 b3 m) Y! A1 ~' K5 x
5 x4 O. L9 D( A# _$ t

    , x: }) h4 ^! p4 ~- A3 {& v* G
  • 创建一个Block。创建Block的路径是 管理->站点创建->区块,页面上方有一个“增加区块”的链接。
    5 p* G5 [. M6 o4 |% O% N/ h: v  o5 M+ B; l
    $ Q/ n( g, g# k) T' i7 h
  • 区块说明:related_articles;区块标题:以下文章可能对您有所帮助,这两个其实都可以随便填,需要注意一下区块标题,如果你只是填写一个“相关文章”,可能对读者的吸引力不够,这个就看你如何吸引读者的眼球了。8 v. i# V: A: k; {9 B6 A
  • 区块内容:放置php代码,并将输入格式设置为PHP Code,需要注意的是,你需要启用模块中的PHP Filter,否则你是看不到PHP Code,PHP代码如下:* X  A7 {8 j' V; a

    * k6 o! g  V1 x3 _* K0 K & v- q% O1 U  l* s+ Q
  • <?php
    5 k0 g, D$ b, F* X* V1 k' F- [
    - R! x. K9 q- V. H6 h3 s//$current_node用来存储当前页面上的node1 W) g! K- w4 \  H! U

    1 o% ~& C, G' Z: ~. _//$current_node用来存储当前页面上的node的关键字
    $ q8 p. D0 m* i# K, [  D2 h

      $current_node = node_load(arg(1));

      $current_terms = taxonomy_node_get_terms($current_node );


    0 `5 r; m. I5 R1 @+ v8 ?: s) C; N! r1 M- s3 o; U, a/ y
    //$current_keyword用来存储合成的关键字(用于Drupal do_search API调用,检索相关文章)7 ~" v4 a# n* @# Z- G* K. ]

      $current_keyword = '';

    / K( _: `0 {3 x: }6 Z% v6 Q) S
    . v  h+ U  [8 B& K0 D
    //将关键字连接起来,用'OR'连接,如果直接用空格连接表示与的关系
    8 t0 e; j  S$ g

    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);

    ) R/ T, m6 z2 b

    9 p& D$ {5 ~! g0 X+ m2 E//Drupal API do_search的关键字长度大于2才执行搜索,这个设置与搜索设置中的最小关键字长度设置有关* A2 F  q. N1 |+ D/ @. N5 A* T' J

    if($keylength > 2)

    {


    4 v0 `- d7 n1 X* J0 w9 W
    # p' f  f( w/ |8 `2 I! ^//$related_results保存的是通过drupal API do_search查询结果,结果就是相关文章
    : G# h, O: M) q0 v- V1 t# m. ^/ H

      $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 .= '<ul>';

    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 .= '<li>';

        $output .= "<a href=\"$linkurl\">";

        $output .= $related_results->title;

        $output .= '</a>';

        $output .= '</li>';

      }

    }

    $output .= '</ul>';

    }

    . W0 n0 m/ d9 a# m4 y6 O/ `
    2 ^* _' E+ u5 y5 Y% F- }8 i& O
    //输出( V4 _- x9 i. o* J

    print $output;

    ?>

    2 D! y  ^6 @4 s! v
    : D2 ^" z: v: H2 T1 x! }
    + a- a4 y* c$ y9 }
  • 设置页面可见性:只在下列页面中显示,设置值为:node*% _3 y# l  r* s8 T, L3 s5 Q/ }
  • 保存区块5 J! x- i% A; y7 c! ]- p, @
  • 在管理区块页面将区块放在content部分,区块将出现在内容最下方
    ( @) j  v* _1 Z3 B9 K
  • 由于相关文章功能对搜索功能有所依赖,如果你还没有为站点内容创建索引,那么赶快创建吧
    2 b. x0 A5 P1 ^
- X8 W4 k. K- p9 H: b3 D7 x

|2011-2026-版权声明|平台(网站)公约|手机版|手机版|DOOOOR 设计网 ( 吉ICP备2022003869号 )

GMT+8, 12-18-2025 08:49 , Processed in 0.221348 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表