Drupalで階層構造を持つサイトを作ろうとすると、わりと苦労することになります。「ふつうコレを使う」というモジュールがあればいいのですが。今のところ、次の方法を試してみました。
階層構造の機能
サイトを階層構造にするということは、どんな機能が必要なのでしょうか。具体的には、次の機能が欲しいところです。
- パンくずリストを表示する
- 子ノードのリストを表示する
- メニューを表示する
これらの機能を、できるだけ自動で行ってほしいという要求があります。ただし、子ノードのリストだけは、多様な表示方法を指定できるのが望ましいです。
メニューを使う
Drupalの基本機能として、ナビゲーションメニューに登録すると自動的にパンくずリストがつくというものがあります。メニューへの登録は、コンテンツを作成するときに指定することができます。
これを使うのが本筋なんでしょうが、Viewsでメニュー項目を参照することができないため、その他のいろんなことができなくなってしまいます。これが少々困り者。
専用モジュールを使う
階層構造をつけることを目的としたモジュールがいくつか開発されています。
Node Hierarchyモジュール
Node Hierarchyモジュールは、それぞれのノードに階層構造を付加するモジュールです。これを使うと、以下のことができます。
- パンくずリストが付きます
- 親ノードに、子ノードのリストをつけることができます
- 階層構造の情報をViewsのフィールドとして扱うことができます
階層構造を表示するだけなら、一通り必要な機能を備えていますので、これを使うのが良いと思われます。ただし、独自データなので、これ以上の応用を効かせようとするととたんに難しくなります。
特に、階層構造はツリー状になるため、Viewsで情報を引き出すことはできてもツリー状に加工することができないという問題がよく出ます。
Categoryモジュール
Categoryモジュールも、それぞれのノードに階層構造を付加するモジュールです。
このモジュールはかなり大規模で、複雑な仕組みになっています。このモジュールが想定する使い方に合致していればとてもハッピーになれそうです。しかし、合致してないと面倒に感じるかもしれません。
当サイトの運営に限って言えば、Node Hierarchyモジュールよりメリットを感じることはありませんでした。
タクソノミーを使う
いくつかのモジュールを入れると、タクソノミーを使って階層構造を作ることができます。
Taxonomy Breadcrumb
ノードに対してついているタクソノミーの階層を、パンくずリストとして表示することができます。また、パンくずリストにつけられるリンクは通常はタクソノミーへのリンクですが、タクソノミーごとにリンク先となるURLを指定することができます。
Taxonomy Hide
特定のボキャブラリのタクソノミーを隠すことができます。
Taxonomy Menu
タクソノミーの階層構造をメニューにすることができます。
Node Auto Term
ノードとタクソノミーを一対一対応させることができます。
ただし、タクソノミーがベースとなっているので、あちこちにタクソノミーへのリンクが出てきてしまうのが困り者です。
結論
当サイトでは、Node Hierarchyモジュールを使うことにしました。機能が必要十分でわかりやすいことと、Viewsとの連携があることが主な理由です。ツリー表示については、メニューとの連動機能があるので、メニュー関係のモジュールでなんとかできることを期待します。
Node Hierarchyを使う上での注意
Node Hierarchy Viewsを使う場合
Node Hierarchy Viewsを使うと、親ノードの中に、子ノードの一覧を表示させることができます。
しかし、この表示には権限が設定されているので、デフォルトではサイト管理者でログインしたときだけ一覧が見えるようになっています。
「権限」の設定で、nodehierarchy_viewsモジュールのaccess embedded child viewの匿名ユーザにチェックを入れると、一般の閲覧者にも子ノードの一覧を見せることができます。