Hierarchical Taxonomy Menu

画像表示、折りたたみ動作、Entity参照カウント機能をサポートした、Taxonomyボキャブラリーのタームから階層型ナビゲーションメニューを作成するDrupalモジュールです。

hierarchical_taxonomy_menu
1,592 sites
54
drupal.org

インストール

Drupal 10, 9 v2.0.1
composer require 'drupal/hierarchical_taxonomy_menu:^2.0'
Drupal 8 v8.x-1.43
composer require 'drupal/hierarchical_taxonomy_menu:8.x-1.43'

概要

Hierarchical Taxonomy Menuは、TaxonomyボキャブラリーをフルコントロールできるBlock配置可能な階層型ナビゲーションメニューに変換する強力なDrupalモジュールです。選択したボキャブラリー内のタームから親子階層を維持しながらメニュー項目を自動生成する設定可能なBlockを提供します。

主な機能として、メニュー項目の横に画像を表示する機能(Taxonomyタームに画像FieldまたはMediaの画像参照がある場合)、JavaScriptによる折りたたみ・展開可能なメニュー動作、現在のTaxonomyタームページに基づいて動的に更新されるBlockタイトルがあります。メニューの深さ制限、ベースタームによるフィルタリング、各タームを参照するNodeやCommerce製品の数を表示する機能もサポートしています。

このモジュールは完全に翻訳可能で、言語ごとのターム公開状態を尊重します。HTML構造を完全に制御できるカスタマイズ可能なTwigテンプレートが含まれており、あらゆるデザイン要件に合わせてメニューをスタイリングできます。キャッシュオプションにより、メニューコンテンツを最新に保ちながら最適なパフォーマンスを確保します。

Features

  • 任意のTaxonomyボキャブラリーから親子構造を自動的に維持した階層型ナビゲーションメニューを作成
  • Taxonomyタームの画像Fieldまたはメディア画像参照を使用してメニュー項目の横に画像を表示
  • ピクセル寸法または画像スタイルによる設定可能な画像サイズ
  • JavaScriptによる展開・折りたたみアニメーション付きの折りたたみ可能なメニュー動作
  • 親項目をクリック可能なリンクとサブメニューのトグルスイッチの両方として機能させるインタラクティブ親モード
  • Taxonomyタームページ表示時に現在のターム名に自動的に一致する動的Blockタイトル
  • 0〜10レベルまたは無制限サブレベルのメニュー深さ制御
  • ベースターム(IDまたは名前)を指定してその子孫のみを表示するメニュー項目フィルタリング
  • 現在のTaxonomyタームページからベースタームを自動設定する動的ベースタームモード
  • 各タームの横に参照しているNodeまたはCommerce製品の数を表示
  • すべての子タームからのカウントを含む再帰的Entityカウント計算
  • 参照コンテンツ(Node/Commerce製品)がないタームを非表示にするオプション
  • キャッシュなしから永続キャッシュまでの設定可能なキャッシュ
  • ボキャブラリーが空の場合にBlock全体を非表示にするオプション
  • 翻訳対応のターム名とURLによる完全な多言語サポート
  • 言語ごとの公開・非公開状態を尊重するターム状態認識
  • ボキャブラリーごとのテーマサジェスション付きカスタマイズ可能なTwigテンプレート
  • 簡単なテーマ設定のためのBEMスタイルCSSクラス
  • メニュー内の現在のタームのアクティブ状態ハイライト
  • アクティブなタームへのメニューパスを展開したまま維持する機能

Use Cases

カテゴリーナビゲーションサイドバー

Taxonomyボキャブラリーから製品や記事のカテゴリーを表示するサイドバーメニューを作成します。ユーザーはカテゴリータームをクリックしてコンテンツを閲覧でき、子カテゴリーは階層ツリー構造で表示されます。折りたたみモードを有効にして、ユーザーが興味のあるカテゴリーを展開できるようにしながらスペースを節約できます。

Eコマース製品フィルタリング

各カテゴリーの横に利用可能な製品数を表示する製品カテゴリーメニューを表示します。「参照しているCommerce製品の数を表示」を有効にし、適切なTaxonomy参照Fieldを選択します。「空のタームを除外」を有効にして、製品がないカテゴリーを非表示にします。ユーザーは各カテゴリーにいくつの製品があるかを一目で確認できます。

アイコン付きビジュアルカテゴリーメニュー

Taxonomyボキャブラリーに画像Fieldを追加し、各タームにカテゴリーアイコンや画像をアップロードします。「サムネイル」などの画像スタイルを使用して画像を表示するようにBlockを設定します。メニューには各カテゴリーが関連アイコンとともに表示され、視覚的に魅力的なナビゲーション体験を作成できます。

コンテキストに応じたサブカテゴリーメニュー

「動的ベースターム」を有効にして、現在のTaxonomyタームの子のみを自動的に表示するメニューを作成します。親カテゴリーページを表示すると、メニューにはそのサブカテゴリーが表示されます。これは、階層内の現在の位置に焦点を当てたい深いカテゴリー構造に役立ちます。

折りたたみ可能なドキュメントナビゲーション

Taxonomyで整理されたドキュメントサイトでは、「現在のTaxonomyタームで展開したまま維持」付きの折りたたみモードを有効にします。メニューは折りたたまれた状態で開始しますが、現在のページへのパスを表示するように自動的に展開され、関連のないセクションを折りたたんだまま、ユーザーが現在地を理解するのに役立ちます。

多言語サイトナビゲーション

翻訳されたTaxonomyタームを持つ多言語サイトでは、メニューは現在の言語でターム名を自動的に表示します。モジュールは言語ごとのターム状態を尊重するため、一部の言語でのみタームを公開し、他の言語では非公開にすることができ、メニューはそれに応じて適応します。

Tips

  • テーマサジェスション(hierarchical-taxonomy-menu--VOCABULARY.html.twig)を使用して、カスタムマークアップを持つボキャブラリー固有のテンプレートを作成できます
  • Blockは「taxonomy_term_list」キャッシュタグを使用するため、タームが追加、編集、または削除されるとメニューは自動的に更新されます
  • 多くのTaxonomyタームを持つサイトでパフォーマンスを向上させるには、キャッシュ設定を使用してデータベースクエリを減らしてください
  • 動的Blockタイトルを使用する場合、タイトルはTaxonomyタームページでのみ変更されます。他のページでは設定されたBlockタイトルが表示されます
  • 「インタラクティブ親」オプションは別の矢印トグルを追加し、親項目がリンクと展開・折りたたみトリガーの両方になれるようにします
  • 画像FieldとMediaの画像参照の両方がメニュー項目の横に画像を表示するためにサポートされています
  • 「ベースターム」を使用して、同じボキャブラリーから階層の異なるブランチを表示する複数のBlockを作成できます
  • CSSクラスはBEM命名規則(block-taxonomymenu__*)に従っており、予測可能なスタイリングが可能です
  • 非公開タームは現在の言語に基づいてメニューから自動的に非表示になります

Technical Details

Hooks 4
hook_help

hook_help()を実装し、モジュールのヘルプページにヘルプテキストを提供します。README.mdの内容を表示し、Markdownモジュールが有効な場合はオプションでMarkdownとしてレンダリングされます。

hook_theme

hook_theme()を実装し、利用可能な変数とともにhierarchical_taxonomy_menu theme hookを登録します。

template_preprocess_block

template_preprocess_block()を実装し、dynamic_block_titleオプションが有効な場合にBlockタイトルを現在のTaxonomyターム名に動的に設定します。

hook_theme_suggestions_HOOK

hook_theme_suggestions_hierarchical_taxonomy_menu()を実装し、ボキャブラリー固有のテンプレートサジェスションを提供します。

Troubleshooting 6
メニューにタームが表示されない

選択したボキャブラリーに公開されたタームが含まれていることを確認してください。「出力が空の場合はBlockを非表示」が有効になっているかどうかを確認し、有効な場合は表示するタームがあることを確認してください。また、ベースターム設定がすべてのタームをフィルタリングしていないか確認してください。

メニュー項目の横に画像が表示されない

画像Fieldを含むボキャブラリーオプション(例:「Categories (with image: field_image)」)を選択したことを確認してください。Taxonomyタームの画像Fieldに画像がアップロードされていることを確認してください。画像スタイルを使用している場合は、画像スタイル設定が正しいか確認してください。

折りたたみメニューが展開・折りたたみしない

ブラウザコンソールでJavaScriptエラーを確認してください。hierarchical_taxonomy_menuライブラリが正しく読み込まれていることを確認してください。jQueryがページで利用可能であることを確認してください。展開・折りたたみにはJavaScriptが有効である必要があります。

Entityカウントがすべてのタームで[0]と表示される

Taxonomyタームを参照しているコンテンツ(NodeまたはCommerce製品)があることを確認してください。Commerce製品の場合は、Block設定で正しい「参照Field」を選択したことを確認してください。参照Fieldが存在し、値が含まれていることを確認してください。

Blockタイトルが動的に変更されない

動的Blockタイトルは Taxonomyタームページ(/taxonomy/term/ID)でのみ機能します。「Blockタイトルを現在のTaxonomyターム名に一致させる」が有効で、Block設定で「タイトルを表示」が可視に設定されていることを確認してください。

翻訳が正しく表示されない

Taxonomyタームに現在の言語の翻訳があることを確認してください。翻訳されたタームが公開されていることを確認してください(ステータスは翻訳ごとに異なる場合があります)。localeモジュールが有効で、言語検出が機能していることを確認してください。

Security Notes 3
  • モジュールはXSS脆弱性を防ぐためにテンプレート内でターム名とURLを適切にエスケープします
  • タームアクセスが尊重され、非公開タームは適切な権限を持たないユーザーには表示されません
  • モジュールはセキュリティとパフォーマンスのために適切なキャッシュタグを持つDrupalの標準キャッシュシステムを使用します