CocoaSpace

Drupalでウェブサイト構築

Custom Pagersで前のノードと次のノードのタイトルを表示

Dec 23 2009
Drupalバージョン: 
モジュール: 
以下の記事はCustom Pagers 6.x-1.x-dev(2009-Sep-18)を使用していることを前提に書いています。Custom Pagersの基本的な設定についてはノードにPrevious、Nextリンクを表示をご覧ください。

フルノード表示のときに、前のノードと次のノードへのリンクを表示するためのモジュール、Custom Pagers。デフォルトだと『‹ previous 3 of 50 next ›』という表示になります(3 of 50はノードリスト総数50のうち3ページ目ということです)。これでももちろん良いのですが、前のノードと次のノードのタイトルを表示したいという方も多いと思います。今回CocoaSpaceの『Drupalニュース』と『お知らせ』セクションに、そのようなリンクを実装しました。

『‹ previous   3 of 50   next ›』というリンクではなくノードタイトルが表示されるようになりました。『‹ previous 3 of 50 next ›』というリンクではなくノードタイトルが表示されるようになりました。

いろいろ方法はあると思いますが、Title of node instead of ‹ previous ... next › | drupal.org#8#9を参考に、custom_pagers_preprocess_custom_pager()に変更を加えることでノードタイトルを表示できるようになります。

しかし、custom_pagers_preprocess_custom_pager()の機能の変更は、custom_pagers.moduleファイルに直接変更を加えなくても、使用するテーマのtemplate.phpにTHEMENAME_preprocess_custom_pager()としてオーバーライドすることができるので、CocoaSpaceではその手法で変更を加えました。

上記のスレッドの#9を例にとれば、下のコードをご使用のテーマのtemplate.phpファイルに挿入することで、ノードタイトルを表示できるようになるはずです。THEMENAMEの部分はご使用のテーマ名に変更してください。

function THEMENAME_preprocess_custom_pager(&$vars) {
  drupal_add_css(drupal_get_path('module', 'custom_pagers') .'/custom_pagers.css');
  $node = $vars['node'];
  $pager = $vars['pager'];
  $nav = $vars['nav_array'];

  $prev = 'prev';
  if (!empty($nav['prev'])) {
    $nodeObj = node_load($nav['prev']);
    if ($nodeObj) {
      $prev = node_page_title($nodeObj);
    }
  }

  $next = 'next';
  if (!empty($nav['next'])) {
    $nodeObj = node_load($nav['next']);
    if ($nodeObj) {
      $next = node_page_title($nodeObj);
    }
  }

  $vars['previous'] = !empty($nav['prev']) ? l('‹ ' . $prev, 'node/'. $nav['prev']) : '';
  $vars['key'] = t('@count / @count_total', array('@count' => ($nav['current_index'] + 1), '@count_total' => count($nav['full_list'])));
  $vars['next'] =  !empty($nav['next']) ? l($next . ' ›', 'node/'. $nav['next']) : '';
}

admin/settings/performanceでキャッシュをクリアしてから、該当するフルノードページで変更を確認してください。成功したでしょうか?

コメントを追加

Powered by Drupal + Linux