web-dev-qa-db-ja.com

分類用語の直接の子をそのページに表示する方法は?

Drupal 8では、どのようにして分類用語の直接の子をそのページに表示できますか?

たとえば、私は次のような階層的な分類語彙を持っています(簡略化):

動物
- 魚類
----ブレニー
------黄色のブレニー
------グリーンブレニー
----ハゼ
------ブルーゴビー
------レッドハゼ

分類用語「魚」(例:drupal/fishes)のページに、BlenniesとGobies(ただし、子供ではない)を表示します。

[構造]> [ビュー]> [詳細設定]でコンテキストフィルターを構成しようとしましたが、できませんでした。

2
Nick Hope

あなたの追加情報を与えられて、あなたに望ましい結果を与えるべきであるこの短いステップバイステップのガイド:

  • 元の分類法ビューを複製/無効化/次のように変更します。
  • 「詳細/コンテキストフィルター」で、「コンテンツ:分類用語IDがあります」を削除します。
  • 新しいコンテキストフィルター「コンテンツ:分類用語IDがあります(深さあり)」を追加します:
    • 深さ:1(次のレベルの子用語のコンテンツも表示されます)
    • フィルター値がURLにない場合:
      • デフォルト値を提供する
      • タイプ:URLからの分類用語ID
      • 用語ページからデフォルトのフィルターを読み込む:オン
    • フィルター値ISがURLまたはデフォルトで指定されている場合:
      • タイトルを上書き:チェック、変数{{ arguments.term_node_tid_depth }}を使用(これにより、用語名がページタイトルに表示されるようになります)
      • (オプション、ただし強く推奨)検証基準を指定:チェック
      • バリデータ:分類用語ID
      • 語彙:(チェックした語彙名)
      • (オプション)ユーザーが分類用語にアクセスできることを確認:チェック

画像を表示したいので、ビューのフォーマットをコンテンツからフィールドに変更して、タグ付けされたコンテンツの画像フィールドを追加することもできます。

深度修飾子は重複する可能性があることに注意してください。したがって、[詳細]/[その他]セクションの[クエリ]設定で、[個別]オプションを有効にする必要があります。

実際の用語への関係、用語名、およびグループ化を追加することで、ビューの結果をさらに改善できます。しかし、これは最初の質問の範囲外のようです。

上記の手順を、自動生成されたコンテンツとボキャブラリを含むクリーンなD8テストインスタンスで実行したところ、問題なく動作しました。

編集:

あなたのコメントによると、実際には子の分類用語のフィールドのみを表示するのが好きです。これがその方法です:

  • デフォルトの分類ビューを無効にする
  • 新しいビューを作成する
  • 表示設定/表示で「分類用語」を選択します
  • 「タイプの」はあなたの語彙です
  • 「ページ設定」で「ページを作成する」にチェックを入れ、URL「taxonomy/term /%」を指定します
  • 「保存して編集」をクリック
  • 詳細設定/コンテキストフィルターで、フィルター「分類用語:親」を追加します
  • タイトル変数を除いて、上記のソリューションと同じ設定をコンテキストフィルターに適用します。title変数は '{{arguments.tid}}'になります。

その結果、分類用語の第1レベルの子がビューに表示されます。

一部のプロパティのみを表示したい場合は、ビューのタイプをフィールドに切り替え、表示するフィールドを追加します。

2
Mario Steinitz

ビュー内:

デフォルトのtaxonomy_termビューを変更または複製している場合は、デフォルトのコンテキストフィルター(has taxonomy term id)を削除し、新しいフィルターを追加する必要があります "深さ1の分類用語IDがあります(深さあり)"

Programmaticaly:

$terms = \Drupal::service("entity_type.manager")->getStorage("taxonomy_term")->loadTree("<VID>","<TID of Fishes>", 1 /* the depth : 1 */, true /* to load entities */);
foreach($terms as $term){
  //rendering whatever...
  print $term->label();
}
0
Oulalahakabu