Skip directly to content

Contextモジュールでサイトをセクションに分ける

投稿日時: 2010/07/04(日) - 23:53
Drupalバージョン: 
モジュール: 

Drupalのデフォルトの状態では、ユーザが自分がどこにいるかわからないほど、サイトのセクションというのが見えにくいですね。確かにコンテンツタイプはあるものの、例えばストーリーコンテンツを投稿しても、example.com/node/1といったURLでシンプルな記事が表示されるだけです。特定のURLや特定のコンテンツタイプに特定のブロックを表示させたり、メニューをアクティブにしてみたりと、サイトの作成者がセクションを作り上げる必要があります。従来はこのセクション分けが結構大変でした。が、現在ではContextモジュールで簡単にセクションに分ける方法が人気のようです。

従来のセクション分けの方法

従来行っていたセクションごとのメニューやブロックの設定の方法を、ノスタルジックな気分で(笑)振り返ってみましょう。

メニュータブのアクティブトレイル

例えば、ストーリーコンテンツタイプで、ニュースを配信する場合を想定してみましょう。Viewsモジュールでストーリーだけを新着順に表示するページを作成し、[ニュース]メニュータブも設定しました。その[ニュース]メニュータブをクリックして、Viewsで作成したページを表示している時はタブがアクティブになっていますが、ひとたびそれぞれのストーリーノードを表示すると、メニュータブがアクティブな状態ではなくなります。その問題を解消するための、Menu Trailsというモジュールがありますが、制約が多くContextモジュールほどには使いやすくありません。

そのメニューの問題を補うために、ブレッドクラム(パンくずリスト)を利用する場合も多いようです。ブレッドクラムを利用して、ユーザが現在サイトのどのセクションにいるのかわかるようにしようという方法です。そのために、Custom Breadcrumbsなど、ブレッドクラムをカスタマイズするモジュールを使用している方が多いようです。セクションごとのメニューやブロックの表示がしっかりしていれば、多くの場合ブレッドクラムを表示する必要はないでしょう。

ブロックの表示・非表示

Drupalのデフォルトのブロックの表示・非表示は、パス(URL)で決定するかPHPコードで条件を設定する方法です。これがあまり使いやすくありません。Pathautoモジュールでコンテンツタイプごとにパスを設定した上で、特定のパスで表示させるようにしたり、PHPコードを用いて特定のコンテンツタイプのみに表示させるようにしたりと大変な苦労をしている方は多いと思います。データベース内にPHPコードを書き込むのは好ましくないといわれていますし、何よりもいちいち面倒なので、出来れば避けたいところです。

Contextモジュールを使用するメリット

Contextモジュールを利用すれば、もう上記のような設定に苦労することはありません。Contextモジュールを使うメリットとして主なものを列挙します。

  1. セクションを設定し、セクションごとにブロックを表示させるリージョンを変更することができる。
  2. デフォルトのブロック設定画面(admin/build/block)のようにサイト全体のブロックをまとめて表示設定するのではなく、ブロックの表示をセクションごとに見ることができ、わかりやすい。
  3. 細かいブロックの表示・非表示の設定にPHPコードを書かなくて済む。
  4. メニューをアクティブにする条件を細かく設定できるため、プライマリリンクとセカンダリリンクを上手に使える。
  5. 設定をエクスポート、再利用できる。

Drupalノートというコンテンツタイプのノードを表示している時に、[Drupalノート]タブがアクティブになっています。このような設定も簡単です。

Contextモジュールの機能概要

簡単にその仕組みをご紹介しようとすれば、「特定のコンテンツタイプ、タクソノミー、パスといった条件(Conditions)を設定し、その条件に合致したときに、特定のブロックを表示したり、メニューをアクティブにしたりというリアクション(Reactions)を起こします。」といったところでしょうか?

これだけではわかり難い思いますので、以下にもう少し詳しく機能をご紹介します。

因みにこの記事でご紹介するContextモジュールの情報は、CocoaSpaceで現在使用しているContext 3.x系を基にしています。2010年7月上旬時点でのバージョンはbeta 5です。3.xのほうが安定版の2.xよりもユーザインターフェイスがわかりやすく、設定が楽だと思います。一般的には正式リリース前のものは使用を控えるべきですが、開発の中心が3.xに移っているような感じで、他のモジュールとの連携も3.xのほうが良いような印象を受けます。どのバージョンを使用するかは各自の判断でお願いします。

Conditions

Contextモジュールでは、以下のような条件でセクションを作成することが出来ます。

  • ブック: 選択されたブックのノードを表示している時。
  • ブックルート: 表示中のノードのルートが選択されたコンテンツタイプの時。オプションでそのコンテンツタイプのノードフォームを使用している時。
  • 言語: 選択された言語でサイトを表示している時。
  • メニュー: 選択されたメニューのいずれかが現在のactive trailに属する時。
  • コンテンツタイプ: 選択されたコンテンツタイプのノードを表示している場合。オプションでそのコンテンツタイプの追加・編集フォームを使用している時。
  • タクソノミー: 選択されたタクソノミータームに属するノードを表示しているとき。オプションでそのノードを編集している時。
  • パス: 設定するパス(URL)と合致する時。
  • サイトワイド: このコンテクストをサイト全体で適用するかどうかを設定。
  • ユーザロール: 選択されたユーザロールに属するユーザが閲覧している時。
  • Views: Viewsモジュール使用時。選択されたViewのページを表示している時。

Reactions

コンテクストがアクティブな時に起こすアクションです。

  • ブロック: どのブロックをどのリージョンに表示するかを設定します。
  • メニュー: どのメニューをアクティブにするかを設定します。
  • Debug: 現在どのコンテクストがアクティブかをDrupalメッセージで知らせます。一般ユーザも見ることが出来るので、稼動サイトでは使用しないほうがいいです。
  • テーマ: セクションのタイトル、セクションのサブタイトル、セクションのbody classを設定します。

このようにサイトをセクションに分けるための様々な仕掛けが用意されています。使い方次第で非常に魅力的なサイト作りができます。Panelsには、Organic groupsと連携してユーザが手軽にサイトのレイアウトを変えることができるなど、エンドユーザ向けの機能を提供しますが、そのような機能を使わなければPanelsの代替モジュールとしても使えます。

後日、CocoaSpaceの設定(大したものではないですが...)を例に、簡単な使用法もご紹介したいと思います。

コメントを追加