Umi Blog
ウミブログ

こんにちは。
Drupalでサイト制作を行う際、「あるページの中に関連するコンテンツの一覧を表示したい」という要件がしばしば出てきます。
単純にページの下部に表示するなどであればブロックでも対応できるとは思うのですが、 例えばノードのフィールドとフィールドの間に挟まれる場合などは結構ややこしいですよね。
今回はもっと手軽に、まるでフィールドのように一覧を表示させることができるEVAモジュールをご紹介いたします。
EVAは正式名称 EVA: Entity Views Attachment というDrupalのコントリビュートモジュールで、ViewsをEntityに添付することができます。 特徴として、
ということが挙げられています。
インストール方法は通常のDrupalのモジュールをインストールする方法で、 特別なことは必要ありません。
それでは実際に使用してみます。 今回はデモサイトとして東京オリンピックのサイトを想定して、 会場紹介ページにその会場で行われる競技の一覧を表示します。 コンテンツタイプは、
の2タイプで、競技には会場を参照するフィールド(field_place)が存在します。
まずはじめにViewsを作成します。
ディスプレイの追加ボタンをクリックすると、「EVAを追加」というメニューをクリックします。 もし「EVAを追加」というメニューが無い場合は、EVAモジュールがインストールされていることを確認して、キャッシュをクリアしてください。
EVAのViews設定画面が表示されますので、まずは「ENTITY CONTENT SETTINGS」の欄の設定を行います。 ここではViewsをどのエンティティに埋め込むかを設定します。
会場に埋め込みたいので、会場を選択します。
これで競技の一覧を会場に埋め込むことができました。
ただし今のままではどの会場をみても全ての競技が表示されてしまいます。
今回のゴールは、「会場を紹介するページの中に、その会場で開催される競技の一覧を表示する」ことですので、 表示する会場に応じて競技を絞り込む必要があります。 ここで先ほど出てきたコンテクスチュアルフィルターを使用します。
整理すると、field_placeから参照されているコンテンツのIDが、引数として渡ってきたIDと一致する必要があります。
そのため、以下の手順でリレーションの追加とコンテクチュアルフィルターの追加を行います。
これで無事に会場ごとに開催競技を表示することができました!
フィールドの表示管理を見てみるとEVAのフィールドが追加されているのがわかるかと思います。 他のフィールドと同様に順番を並べ替えたり、ビューモードに応じて非表示にしたりなども可能です。
いかがでしたでしょうか。ページの一部にViewsを表示させる方法は何通りかあるとは思いますが、EVAで生成したViewsはフィールドと同じように扱えるのでレイアウトの幅が広がるかと思います。基本的にはViewsを作成するだけなので設定もそこまで複雑でないのが嬉しいです。皆さんも機会があれば使ってみてください。
小さなご意見も、私たちにとっては大きなヒントです!
ぜひ率直なご感想をお寄せください
この

Masters of Drupal Engineering.
人に、