タクソノミーの構造順にコンテンツと子タームをデザインして展開したい

Events happening in the community are now at Drupal community events on www.drupal.org.
s-jack's picture

タクソノミーに以下のタームがあったとします。

食べもの
ー生鮮食品
ーーくだもの
ーーーみかん
ーーやさい
ーーーにんじん
ー加工食品

タームにもfieldAPIのおかげで概要や写真などなどフィールドを追加できるようになりました。
そこで、メニューで、
生鮮食品を選ぶとそのコンテンツに、
第1に、生鮮食品タームのフィールドデータである概要と写真が表示され、
第2に(その下に)、生鮮食品タームが関連されたコンテンツのティーザー表示のような簡易表示がグリッドなどで幾つか表示され、
第3に(その下に)、子タームの、くだもの、やさいのターム自体のティーザーみたいな簡易表示がリンクとともに表示される。

これの繰り返しとなるようなコンテンツ展開を作りたいと思っています。

このようにメニューと、タクソノミの階層構造が同一で、そのコンテンツも階層構造で表示されるようにするにはどうすれば良いでしょうか?

タクソノミメニュー・モジュールは、タームの階層構造とおなじメニューのみ作るモジュールかと思います。
VIEWSを使うとこういうことができるのでしょうか?

テンプレートを直接作らないとダメですか?

ご教示よろしくお願います。

Comments

Viewsで作成可能です

shumpei's picture

s-jackさん、こんにちは。

設定が多少複雑ですが、Viewsで作成可能です。
試しにsimplytest.meで作ってみましたので、ぜひご覧ください。
https://rr176.ply.st/taxonomy/term/3
user: admin
pass: admin

24時間で消えてしまうので、作成方法を、追記します。

追記です:

文章だけで分かりづらいかと思いますが、少しでも参考になれば幸いです。

必要モジュール
- Views
- Views Field View (https://www.drupal.org/project/views_field_view) * ビューのフィールドとして別のビューを表示させます。

まず、関連するコンテンツを表示するビューを作成します。
1、コンテンツを表示するブロックビュー(関連コンテンツ)を作成。
2、リレーションシップでContent: 食べもの(コンテンツ内の食べものフィールド名)を選択
3、Contextual filter(前後関係からみたフィルター)で、Taxonomy term: Term IDを設定し、リレーションシップにterm from field_… を指定します。

次に、タームのページに、子のタームを表示させるビューを作成します。

1、タームページの子となる食べものタームを表示するブロックビュー(食べもの(子))を新規作成。
2、Advancedセクションのリレーションシップでparent termを設定。
3、Contextual filter(前後関係からみたフィルター)で、Taxonomy term: Term IDを設定し、同設定内のRelationshipをParentとし、フィルターの値がURLに含まれていない場合の設定で、デフォルト値を指定、URL から取得するタクソノミーターム IDとします。
4、以下のフィールドを表示させます。
Taxonomy term: Name
Taxonomy term: Term ID (Term ID)
Global: View (関連コンテンツ)

Views Field Viewがインストールされていれば、ビューのフィールドからGlobal: Viewが選択できます。関連コンテンツのビューブロックを表示するよう設定し、Contextual Filter欄に[!tid](タームIDのトークン)を入力します。

これで、食べ物(子)ブロックをタームページに表示させる設定を行えば、とりあえず、生鮮食品ページにおいて、くだもの、野菜のタームとその関連コンテンツが表示されます。

以下は、くだもの、野菜の子タームと、その関連コンテンツを表示させる設定です。

1、(食べ物(子))ビューのディスプレイを複製し、食べ物(子)(2段目)と名前をつけておきます。

2、複製されたビュー(2段目)のContextual Filterのフィルターの値がURLに含まれていない場合の設定で「ビューを非表示」に設定。(複製元ビューの設定を上書きしないようにご注意ください)

3、複製元のディスプレイのフィールドに、Global: View (食べ物(子)(2段目))を追加し、Contextual Filter欄に[!tid](タームIDのトークン)を入力します。

以上で、生鮮食品タームページにおいて、くだもの>みかんまで、関連コンテンツが表示されるようになります。それより子を表示させたい場合には、2段目に3段目ディスプレイ、3段目に4段目ディスプレイを表示させるようにすれば、可能です。
(1段目に1段目のディスプレイを表示させられれば複製しなくて良いのですが、Views Field Viewではできません。)

s-jack's picture

Shunpeiさんこんにちは。
早速テスト環境まで作って検証いただきありがとうございました。
24時間で消えちゃうので拝見いたしました。
おおむね近いような動きになってました。
設定の方はまだ理解できてません。
取り急ぎ報告とお礼です。

設定は、ローカル環境に再現して理解深めたいと思います。
が、VIEWS自体まだよくわかってませので、基本的な質問すると思いますので、よろしくお願いいたします。

s-jack's picture

午前中ずっとローカル環境で格闘しておりました。

だめだ、VIEWSをなぜそのように設定してるか、全く理解できません(笑)。

すみません、VIEWSを理解・勉強できるソース教えてもらえませんか?

今理解していること、疑問に感じていること
*なぜVIEWSでブロックを作成するのか理解できない
*VIEWSを2本立てにしているところは、なんとなくイメージできる
*こまかなVIEWSの設定そのものが理解できない

です。

shumpei's picture

s-jackさん、こんにちは。

以下のチュートリアルがViewsを理解するのに良さそうです。
(まだまだ日本語のソースが少ないですね。)^^;

1、Drupalで新着情報機能を作ろう!:https://drupal.studio-umi.jp/blog/lets-make-news-feature2
2、Views でリンク集を作る:http://customfield.jp/tips/content/146

VIewsは結局のところ、SQLのクエリーを作成する機能なので、SQLのSELECT文について知っておくと、しっくりくることもあります。

s-jack's picture

Shumpeiさん、ソースありがとうございました。
早速勉強いたします。

SQLクエリーは、Schooなどでも受講し基礎は勉強しましたが、JOIN系が全く理解できません。
ピリオドでつなげる表記とか出てくると混乱します。

1、タームページの子となる食べものタームを表示するブロックビュー(食べもの(子))を新規作成。
2、Advancedセクションのリレーションシップでparent termを設定。
3、Contextual filter(前後関係からみたフィルター)で、Taxonomy term: Term IDを設定し、同設定内のRelationshipをParentとし、フィルターの値がURLに含まれていない場合の設定で、デフォルト値を指定、URL から取得するタクソノミーターム IDとします。
4、以下のフィールドを表示させます。

4番の、フィールドを表示し設定するのに、リレーションやらコンテクストフィルターやらを、つまり高度な設定を先に設定しないとフィールドが現れないあたりが難しいですね。
よーく考えれば先にリレーションを定義するから出てくるんだろ、となんとなく納得しますけど。
高度な設定をもっと勉強したいですね。
技術的につまずく前に、英語でつまずいてるので、なかなか理解ができません。

教えていただいたソースを勉強し、再チャレンジします。m(__)m

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: