Drupalのフルノード表示のときに、WordPressのように記事の上などに前の投稿と次の投稿のリンクがあればいいなと思ったことはありませんか?Bookモジュールで作成するノードならそれに似たリンクが表示されますが、その他のノードには、前の投稿と次の投稿へのリンクが表示されません。
以前、このような機能を実装するPrevious/Next APIというモジュールを見つけました。Previous/Next APIはパフォーマンスに主眼を置いた設計になっているようで、予めcronでノードのリストをインデックスしておくので、ページのロードに時間がかからないとのことです。しかし、現時点ではリストの作成はノードタイプ別でしかできないようです。
ちょっと調べただけですが、Previous/Next APIは以下のようなケースでの利用に適していると思われます。
- WordPressのデフォルトのように『』や『previous | next』というシンプルな表示で十分
- ノードタイプ別のリストだけで十分
- パフォーマンスを重要視しなければならない
- ちょっとしたコードを書くのも厭わない(同梱のREADME.txtに例があるので難しくないと思います)
最近CocoaSpaceが別サイトで実際に導入したのはCustom Pagersというモジュールです。このモジュールはページ表示のとき、Viewsモジュールを利用してノードのリストを取得する(独自のPHPスニペットでリストを取得することも可能)ため、Previous/Next APIに比べてパフォーマンス的には劣るというようなことが書いてありました(Previous/Next API: a high performance API module for previous/next node | 2bits.com Inc.)。しかし、その点に目を瞑り、以下のような利点を考慮してCustom Pagersを採用しました。
- ViewsとTokenモジュールを使用できるということで簡単に設定ができる
- ViewsとTokenの使用でノードタイプ別以外にもリストの分類が簡単
- 『3 of 50』というような現在のページとノードの総数をデフォルトで表示できる
少し調べただけですが、以下にCustom Pagersの設定法を簡単に書きます。スクリーンショットの画面はテスト環境のものです。
Custom Pagersの設定
参考になる記事:
Custom Pagersのドキュメンテーション
Custom Pagersの設定では、ViewsとTokenを使用した簡単・お手軽な方法を採りました。初めにCustom Pagers 6.x-1.10-beta1を試してみたのですが、Viewsで設定でitems to displayを無制限にしてもPagerには10しかリストされない(http://twitter.com/cocoaspace/status/6682473846)というバグがあったり、環境によってはPagerがまったく表示されない(設定が間違っているのかな?)ことがありました。というわけで、Custom Pagers 6.x-1.x-dev(2009-Sep-18)を使用することにしました。以下の内容もこのdevバージョンを前提とします。この記事を読んでくださる方で、ご自分もこのモジュールを使おうという場合には十分にテストしてからにしてください。
インストール
他のモジュールと同じようにsites/all/modulesなどにアップロードします。アップロード後にadmin/build/modulesでCustom Pagersの箇所を見ると、依存するモジュールはありません。しかし、ViewsとTokenもインストールしてあると設定が簡単です。以下の内容もViewsとTokenがインストールしてあることを前提とします。
Viewsの設定
ここではあくまでもCustom Pagersで使用するためのviewを作成しました。従いまして、必要最低限の設定でDefaultのviewだけを作成します。
admin/build/views/addでView nameを入力し、View typeにNodeを選択して[Next]をクリックします。
Items to display(表示するアイテムの数)を0に設定します。0と設定することで表示しなくなるのではなく、アイテム数が無制限になります。
Basic easy setup of Custom Pagers module | drupal.orgにあるように、FieldsnにはNode: Titleだけを設定します。ここでノードタイトルを設定しますが、Custom Pagersでは『< previous』、『next >』などの表示しかされず、ノードタイトル自体が表示されるわけではありません。上記のBasic easy setup of .... には、「Viewを保存するにはFieldsに少なくとも一つは項目を設定する必要がある」というような書かれ方がされていたので、試しにNode: Nidを指定したところ、何の問題もないようです。とにかくRow styleがFieldsでなければCustom Pagersの設定画面から当該Viewを選択できなくなります。
FiltersににはNode: Published Yesとだけを設定します。
以下は任意です。
- ArgumentsにNode: Typeを追加します。これを追加することで、Custom Pagersでノードタイプ別にPrevious、Nextリンクを作成することができます。複数のノードタイプ別のpagerを作りたい場合に、この1つのViewを使いまわすという使い方ができるようになります。
Basic easy setup of .... のように、Filtersでノードタイプを指定するという方法もありますが、複数のノードタイプでpagerを表示させたい場合、ノードタイプ毎にこれと同じようなViewを作成する必要がありますので、Argumentsにノードタイプを設定するほうが手軽です。
ノードタイプの他にも、投稿者別にリストを作成したりもできるようなので、興味のある方はこのArgumentsの設定をいろいろと試してみてください。
Custom Pagersの設定
Custom Pagersの設定はadmin/build/custom_pagersで行います。まずはadmin/build/custom_pagers/addで新しいcustom pagerを作成します。
Title Titleは先程Viewsで設定したview nameと同じにしておくとわかりやすいかもしれません。
Pager position フルノードの画面でpagerをノード本文の上に表示させるか、下に表示させるかなどを設定します。
Pager visibility By node typeのところだけを設定し、他は空欄にしました。
Pager node list Use a viewで先程設定したViewを選択します。View argumentsにはargumentsにNode: Typeを設定した方は[type]というTokenを入力します。
これで設定は終了です。実際にノードページを表示して確認してください。
他にも同じような機能を実装できるモジュールがあるかもしれませんが、私が試してみたものはこれだけです。また、上記のようなモジュールを使用せず、簡単なコードだけで同機能を実装する方法もあります。ご自分のサイトに適した方法でお試しください。



コメントを追加