首页 > 网站 > 建站经验 > 正文

Drupal 7 实现上一篇下一篇的简单方法

2024-08-30 19:06:39
字体:
来源:转载
供稿:网友

在建个人小站[阿亮php笔记]时,想在文章页面实现“上一篇,下一篇”的效果,Drupal 7 是没有默认带这个功能的,网上也有写好的模块,不过个人感觉,这么一个小功能还装个模块的话,太浪费性能的,反正就两条SQL搞定,就自己随便写一下吧.

在模板/sites/all/themes/liuzhiliang.com/template.php文件上加个函数,代码如下:

  1. /** 
  2.  * myNodePrevNext 
  3.  * 文章上一篇下一篇 
  4.  * $nid - 节点id 
  5.  * $type - 节点类型 
  6.  */ 
  7. function myNodePrevNext($nid$type
  8.     $output = '<ul>'
  9.     $sql_previous = "SELECT n.nid, n.title, url.alias " 
  10.                   . "FROM {node} AS n " 
  11.                   . "LEFT JOIN {url_alias} AS url " 
  12.                   . "ON concat('node/',n.nid)=url.source " 
  13.                   . "WHERE n.nid < :nid AND n.type = :type " 
  14.                   . "ORDER BY n.nid DESC " 
  15.                   . "LIMIT 0, 1"
  16.     $result_previous = db_query($sql_previousarray(':nid' => $nid':type' => $type)); 
  17.     $strings = array(); 
  18.     foreach ($result_previous as $data
  19.     { 
  20.         $data->url = ($data->alias) ? $data->alias : '/node/' . $data->nid; 
  21.         $output .= '<li>上一篇:' 
  22.                 . '<a href="' . $data->url . '" title="' . $data->title . '">' 
  23.                 . $data->title 
  24.                 . '</a>' 
  25.                 . '</li>'
  26.     } 
  27.     $sql_next = "SELECT n.nid, n.title, url.alias " 
  28.               . "FROM {node} AS n " 
  29.               . "LEFT JOIN {url_alias} AS url " 
  30.               . "ON concat('node/',n.nid)=url.source " 
  31.               . "WHERE n.nid > :nid AND n.type = :type " 
  32.               . "ORDER BY n.nid ASC " 
  33.               . "LIMIT 0, 1"
  34.     $result_next = db_query($sql_nextarray(':nid' => $nid':type' => $type)); 
  35.     $strings = array(); 
  36.     foreach ($result_next as $data
  37.     { //Vevb.com 
  38.         $data->url = ($data->alias) ? $data->alias : '/node/' . $data->nid; 
  39.         $output .= '<li>下一篇:' 
  40.                 . '<a href="' . $data->url . '" title="' . $data->title . '">' 
  41.                 . $data->title 
  42.                 . '</a>' 
  43.                 . '</li>'
  44.     } 
  45.     $output .= '</ul>'
  46.     return $output

再到/sites/all/themes/liuzhiliang.com/templates/node.tpl.php加上下面这段代码,具体位置看自己喜欢,我是在文章底部显示,所以在回在了<div class="content clearfix"<?php print $content_attributes; ?>>后面,代码如下:

  1. <?php if (!$teaser) : ?> 
  2.   <div class="previous_next"
  3.     <?php print myNodePrevNext($node->nid, $node->type); // 上下篇 ?> 
  4.   </div> 
  5. <?php endif; ?>

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表