Drupal_CCKで作成したフィールドの値をViewsで取り出す
- 必要なモジュール
- CCK(Content Construction Kit)
- Views
- こんな目的に使います
- Viewsは、データベースからあらゆる条件でデータを抽出できるすばらしいモジュールですが、今回は特殊な目的のためにViewsを使用しています。
ホームページを作成するときに、皆さんは、<h1>などの見出しタグを使用すると思います。特に<h1>は、1ページのうちに1つだけしか使用が許されない(複数使えないわけではありません)、特別なタグです。SEOの観点から考えると、できればページごとに、そのページに適したテキストを入力したいところです。しかし、 ノード本文にh1を入力すると、下図の左のような配置にされてしまいます。私がh1を挿入したいのは、右図のようにヘッダーの上でしたが、図の青い部分はtheme部分に相当します。これは、どのページにも適用されるデザイン部分です。通常ページごとに異なる入力ができるのは、黄色のノード本文のみです。
blockで作ると全ページ分のブロックを作成することになり、大変な手間とボリュームになってしまいます。
そこで、利用したのがCCKとViewsです。CCKでh1用のテキストを入力するフィールドを作成し、それをViewsで抽出することにしました。
ここでは、上記を目的としたViewsの使い方について説明します。Viewsは、非常に拡張性が高く、様々な使い方ができるため、いわゆる「スタンダードな使い方」が存在しません。設定項目が多く、直感で設定することが困難なため、始めは手を出しにくいモジュールと言えます。ここでは、手順を一つずつ追っていきます。
- 管理セクション/サイトの構築/ビューを開いてください
- 新しいビューを作成するので、タブの「追加」をクリックしてください。
- この表の項目をひとつずつ設定し、抽出条件を指示していきます。全て触らなくても大丈夫です。まず、基本設定ですが、設定したもののみを次に記します。
- 名前:h1(①)
- タイトル:h1(②)
- 表示アイテム数:1(③)
- ブロックへのフォームの表示:はい(④)
- ここからが重要です。先にフィールドの設定をします。ここで設定するフィールドとは、データベースから「どの値」を抽出するかを指定します。例えば、データベースの中にある「A」という値を引っ張りたい、というときに、ここで「A」と指定するということです。表中央のフィールドという項目の「+」(⑤)をクリックしてください。
- たくさんのフィールド値が並んでいると思いますが、今回は、CCKで作成したh1というフィールドです。「コンテンツh1」というフィールドがあるので、これにチェックを入れます。(⑥)
- 更に、このフィールドをどのように表示するかを細かく設定できます。
今回は、ほとんど触りません。一番最後の「ラベル:なし」と「フォーマット:プレーンテキスト」のみを設定します。
設定が終わったら、「更新」ボタンをクリックしてください。 - 次に、引数の設定をします。
先ほど設定した、フィールドの上に設定欄があります。ここの「+」をクリックしてください。ここでは、ノード:NIDにチェックを入れます。(⑦)
ノード:NIDとは、Drupalの変数$node->nidを指すもので、意味は「現在表示中のページ番号」です。Drupalは、作成したコンテンツに識別番号を振っています。URLエイリアスなどで任意のURLを指定していなければ、作成したページのURLの末尾に番号が付きます。それが$node->nidです。
この引数で、なぜ$node->nidを指定するかというと、私がほしいのは、現在表示中のページで入力したh1というフィールドの値です。エクセルのvlookup関数であるキーとなる値を軸にデータベースからキーとマッチする値を引っ張るように、ここでも抽出条件としてのキーを設定するのです。
現在表示中のページ($node->nid)にマッチするh1の値を選びます。引数が存在しない場合の動作:デフォルト引数を提供(⑧)を選択し、デフォルト引数のタイプにURL に含まれるノード ID(⑨)を選びます。
- 抽出条件の指定は、ここまでで終了です。次に、抽出したデータを表示するための設定をします。私は、抽出したデータをブロックに入れて、page.tpl.phpのh1を表示したい場所にリージョンを設けました。従って、このveiwsをブロックに書き出さなければいけません。
views 「h1」のトップページの左上にプルダウンメニューがあります。ここで「ブロック」を選び、ディスプレイの追加をしてください。すると、先ほど設定していた各種項目の下に同じような表示がひとつ増えると思います。この増えたディスプレイの左下を見てください。
「ブロック設定」という項目があります。ここの「管理」(⑩)をクリックして、ブロックの名前を入力してください。ここでは「h1」とします。ここまで出来たら、viewsの設定は終わりです。
最後に「保存」(⑪)をクリックしてください。これをしないと、viewsは設定されたことにはなりませんので、要注意です。
- それでは、viewsをあとにして、再び管理セクションに戻りましょう。先ほど作成したブロック「h1」が出来ているはずなので、ブロックを見てください。
- 「h1」という名前のブロックがブロックリストの「無効」の中にリストアップされていると思います。ここで、このブロックを表示する場所を「リージョン」で選びます。
しかし、デフォルトのリージョンの中には、h1を設置したい場所がありません。なので、リージョンを作成します。 - リージョン(領域)を追加するには、次の設定が必要です。
- 再び、管理セクションからブロックに戻ります。先ほどのh1ブロックのリージョンに作成したリージョンh1を選んでください。
- ブロックの保存をします。
- 実際にページを更新してみて見ましょう。ノード編集画面で入力したh1テキストが、viewsで抽出され、ブロックで表示されています。
そもそもh1用のテキストを入力するフィールドは、CCKで作成しますが、使用する全てのコンテンツタイプにh1用のフィールドを作成する必要があります。でないと、pageで作成したコンテンツには、h1用のフィールドがあるけど、blogで作成したページにはh1用のフィールドがない、ということになります。
使用する全てのコンテンツタイプにフィールドを作成したら、当然、viewsの抽出フィールドも増やさなければいけません。図のフィールド欄に「コンテンツh1」が4つ並んでいますが、これはコンテンツタイプごとにh1テキストを抽出した結果です。