Posted by s-jack on June 4, 2016 at 12:53pm
タクソノミーに以下のタームがあったとします。
食べもの
ー生鮮食品
ーーくだもの
ーーーみかん
ーーやさい
ーーーにんじん
ー加工食品
タームにもfieldAPIのおかげで概要や写真などなどフィールドを追加できるようになりました。
そこで、メニューで、
生鮮食品を選ぶとそのコンテンツに、
第1に、生鮮食品タームのフィールドデータである概要と写真が表示され、
第2に(その下に)、生鮮食品タームが関連されたコンテンツのティーザー表示のような簡易表示がグリッドなどで幾つか表示され、
第3に(その下に)、子タームの、くだもの、やさいのターム自体のティーザーみたいな簡易表示がリンクとともに表示される。
これの繰り返しとなるようなコンテンツ展開を作りたいと思っています。
このようにメニューと、タクソノミの階層構造が同一で、そのコンテンツも階層構造で表示されるようにするにはどうすれば良いでしょうか?
タクソノミメニュー・モジュールは、タームの階層構造とおなじメニューのみ作るモジュールかと思います。
VIEWSを使うとこういうことができるのでしょうか?
テンプレートを直接作らないとダメですか?
ご教示よろしくお願います。

Comments
Viewsで作成可能です
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ではできません。)
Shunpeiさんこんにちは。 早速テスト環境まで作って検
Shunpeiさんこんにちは。
早速テスト環境まで作って検証いただきありがとうございました。
24時間で消えちゃうので拝見いたしました。
おおむね近いような動きになってました。
設定の方はまだ理解できてません。
取り急ぎ報告とお礼です。
設定は、ローカル環境に再現して理解深めたいと思います。
が、VIEWS自体まだよくわかってませので、基本的な質問すると思いますので、よろしくお願いいたします。
午前中ずっとローカル環境で格闘しておりました。 だめだ、V
午前中ずっとローカル環境で格闘しておりました。
だめだ、VIEWSをなぜそのように設定してるか、全く理解できません(笑)。
すみません、VIEWSを理解・勉強できるソース教えてもらえませんか?
今理解していること、疑問に感じていること
*なぜVIEWSでブロックを作成するのか理解できない
*VIEWSを2本立てにしているところは、なんとなくイメージできる
*こまかなVIEWSの設定そのものが理解できない
です。
s-jackさん、こんにちは。 以下のチュートリアルがVi
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文について知っておくと、しっくりくることもあります。
Shumpeiさん、ソースありがとうございました。 早速勉
Shumpeiさん、ソースありがとうございました。
早速勉強いたします。
SQLクエリーは、Schooなどでも受講し基礎は勉強しましたが、JOIN系が全く理解できません。
ピリオドでつなげる表記とか出てくると混乱します。
4番の、フィールドを表示し設定するのに、リレーションやらコンテクストフィルターやらを、つまり高度な設定を先に設定しないとフィールドが現れないあたりが難しいですね。
よーく考えれば先にリレーションを定義するから出てくるんだろ、となんとなく納得しますけど。
高度な設定をもっと勉強したいですね。
技術的につまずく前に、英語でつまずいてるので、なかなか理解ができません。
教えていただいたソースを勉強し、再チャレンジします。m(__)m