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

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,微信登陆

搜索

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

[复制链接]
发表于 2-16-2012 23:31 | 显示全部楼层 |阅读模式
预备条件:
$ E- \( ]* o- w0 S& Q, T) _* F# H: y7 a

% e% [: q7 T9 b5 w3 W! i, \6 |* J
7 T6 e* U& G5 a' N1 ^8 P

    % E4 W& l. z" y9 P0 M1 m
  • Drupal 6.x (其他版本也可以参考)4 @8 N  \* h2 f
  • 启用Search模块
    # Y/ P5 B) d/ y, K3 C
  • 启用CSplitter模块
    % l' [0 H% A! Q. Q: X" M; }
  • 启用Taxonomy模块,并且文章中设置了Tag或Taxnomy(相关文章的检索条件)5 o" B4 X4 b" I
    - U8 P- \! D  l. Z1 y8 X+ Q+ U* I; Z

% u8 Y4 w5 Z! j3 _5 f7 p
- O% S/ e$ ^! n4 d4 U$ S1 t) }, f6 e6 \( \+ j
, S' _+ ^2 Z+ Y  {

7 I  _( I! q# B  n
& C7 T, L" q: c
4 V& v/ L& D' m# i

8 I0 [; u9 R+ E& s1 b, S
步骤:

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

+ u& p; l+ p7 _4 G5 \6 c9 n2 B4 Q6 K/ A- V1 {
    + S8 d: q# Q0 i& i* M
  • 创建一个Block。创建Block的路径是 管理->站点创建->区块,页面上方有一个“增加区块”的链接。( |5 c. k/ u# \$ ~3 ?

    ! i8 i5 G5 x; o, N3 F% b6 g
    7 W9 X% t& D; ^9 T/ Q! e
  • 区块说明:related_articles;区块标题:以下文章可能对您有所帮助,这两个其实都可以随便填,需要注意一下区块标题,如果你只是填写一个“相关文章”,可能对读者的吸引力不够,这个就看你如何吸引读者的眼球了。4 S0 ?; P/ M$ }$ t3 [: v
  • 区块内容:放置php代码,并将输入格式设置为PHP Code,需要注意的是,你需要启用模块中的PHP Filter,否则你是看不到PHP Code,PHP代码如下:4 m# ], r# ?6 T& V" W& F+ q0 w
      t8 C% f! d. ^$ V2 c5 Y  e
      l: V6 E  a) o, {% K$ n% w, M
  • <?php
    ! Y+ l0 t6 E; k; Y) d0 S8 [- o3 |% P1 f+ V  p
    //$current_node用来存储当前页面上的node
    " u) k( }; D! W- q8 z7 O& m( N/ F2 ?, `  a
    //$current_node用来存储当前页面上的node的关键字% {2 ~! Y+ Y: W4 q

      $current_node = node_load(arg(1));

      $current_terms = taxonomy_node_get_terms($current_node );


    , \4 |' }. ~$ u0 R" O, y% {6 |% f* N9 _4 W( p* t" Z  I
    //$current_keyword用来存储合成的关键字(用于Drupal do_search API调用,检索相关文章)8 T5 F4 j9 x4 E% t

      $current_keyword = '';

    # p2 k5 C7 T0 D3 R- ]

    0 _1 j: A) H4 u/ N$ i6 v. M//将关键字连接起来,用'OR'连接,如果直接用空格连接表示与的关系
    & a) w  k( R+ s1 R& b

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

    & Q6 d# f6 ~6 P+ W+ s
      h5 x' p& F' {0 C( k' d% h
    //Drupal API do_search的关键字长度大于2才执行搜索,这个设置与搜索设置中的最小关键字长度设置有关! m, L7 O1 n' T6 I" b4 A+ t

    if($keylength > 2)

    {


    . p  P, J9 s$ V% f9 B
    2 y$ g' Q5 ]0 z8 I//$related_results保存的是通过drupal API do_search查询结果,结果就是相关文章
    " I5 x' e8 d& g+ ]# N

      $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>';

    }

    1 A$ \- A( @6 y7 j" X2 O4 X3 ~
    ( p7 H3 T' _) H# s- L1 ]
    //输出* ^& [/ g" W" ?$ w4 ?

    print $output;

    ?>

    & i5 ~, A" I6 q
    2 ]3 Q3 x4 {! t# L( R5 V: a+ o
    . g7 |$ X/ L% y% N8 L) B, z
  • 设置页面可见性:只在下列页面中显示,设置值为:node*
    1 A- P- N/ K7 G+ v
  • 保存区块5 O: K* C) b* m7 u. J8 F
  • 在管理区块页面将区块放在content部分,区块将出现在内容最下方5 M8 a; x$ V" t3 d5 Y  D
  • 由于相关文章功能对搜索功能有所依赖,如果你还没有为站点内容创建索引,那么赶快创建吧
    : ?4 o! _& i: z) d6 b! L# G: F+ |

& f. B- S9 |5 h

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

GMT+8, 11-11-2025 18:26 , Processed in 0.321826 second(s), 160 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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