Menu Breadcrumb
メニューの位置とタイトルに基づいてパンくずリストを生成します。メニューに直接配置されていないページにはタクソノミーベースの関連付けをサポートします。
menu_breadcrumb
インストール
composer require 'drupal/menu_breadcrumb:^2.0'
composer require 'drupal/menu_breadcrumb:8.x-1.16'
概要
Menu Breadcrumbは、Drupalのデフォルトのパスベースのパンくずリストシステムに代わる強力な代替手段を提供し、メニュー構造に基づいてパンくずリストを生成します。このモジュールは、現在のページがどのメニューに属しているかを調べ、そのメニューを通じた階層パスをパンくずリストとして表示することでパンくずリストの経路を決定します。
このモジュールの最も強力な機能の1つは「タクソノミー関連付け」です。これにより、どのメニューにも直接配置されていないページが、所属するタクソノミータームからパンくずリストを継承できます。例えば、カテゴリでタグ付けされたブログ記事は、ブログ記事自体がメニュー項目でなくても、そのカテゴリのメニュー位置のパンくずリスト経路を継承します。
このモジュールは、メニューごとの言語処理により多言語サイトをサポートし、メニューの言語が現在のコンテンツ言語と一致する場合にのみパンくずリストが生成されるようにします。複数のメニューを異なる優先度で設定でき、モジュールは最初に一致したメニューを使用してパンくずリストを生成します。
メニューの一致やタクソノミー関連付けが見つからない場合、モジュールは適切に処理を譲り、他のパンくずリストビルダー(Drupalのデフォルトのパスベースビルダーなど)がパンくずリストの生成を処理できるようにします。
Features
- URLパス構造ではなくメニュー階層に基づいてパンくずリストを生成
- タクソノミー関連付け機能により、メニューに直接配置されていないページにタクソノミータームからパンくずリストを継承させてメニューベースのパンくずリストを提供
- 言語ごとに別々のメニューを持つ多言語サイト向けのメニューごとの言語処理
- ドラッグ&ドロップの並べ替えによる設定可能なメニュー優先度で、どのメニューが優先されるかを制御
- 現在のページタイトルをパンくずリスト経路にリンクまたはプレーンテキストとして追加するオプション
- タクソノミー関連付けされたメンバーページをパンくずリスト経路に追加するオプション
- 設定可能なホームリンク処理:ホームリンクの追加、削除、またはホームタイトルにサイト名を使用
- フロントページのパンくずリストに「ホーム」の代わりにメニュー親タイトルを使用するオプション
- 空のURLを持つメニュー項目をパンくずリスト経路から除外
- 無効なメニュー項目をパンくずリスト経路から除外
- メニュー内で最初に一致するURLでパンくずリスト経路を停止
- 管理ページでメニューベースのパンくずリストを無効にするオプション
- 大規模なメニューを持つ多言語サイトでのパフォーマンス向上のためのDerived MenuActiveTrailオプション
Use Cases
カテゴリベースのパンくずリストを持つブログ
記事がカテゴリでタグ付けされているが、個別にメニューに配置されていないブログサイト。メインメニューでタクソノミー関連付けを有効にし、カテゴリタクソノミータームをメニューに追加することで、すべてのブログ記事はカテゴリに基づいて自動的にパンくずリストを継承します。例えば、「テクノロジー」でタグ付けされた記事は次のように表示されます:ホーム > ブログ > テクノロジー > [記事タイトル]
言語ごとに別々のメニューを持つ多言語サイト
各言語用に別々のメインメニュー(例:main-en、main-fr、main-de)を持つ多言語ウェブサイト。各メニューで言語処理を有効にして、現在のコンテンツ言語と一致するメニューのみがパンくずリストに使用されるようにします。これにより、パンくずリストが間違った言語で表示されることを防ぎます。
ECサイトの商品パンくずリスト
商品がタクソノミーカテゴリで整理されているが、すべての商品がメニュー項目ではないECサイト。商品カテゴリをメニューに追加し、タクソノミー関連付けを有効にします。商品はカテゴリからパンくずリストを継承します:ホーム > ショップ > 電子機器 > スマートフォン > [商品名]
階層的ナビゲーションを持つドキュメントサイト
深いメニュー階層を持つドキュメントサイト。現在のページをパンくずリストに追加し、プレーンテキスト(リンクではなく)として表示するようにモジュールを設定すると、ユーザーは自分の位置を確認できます。ページが複数のセクションに表示される場合は、「最初の一致で停止」を有効にして最初のメニュー出現を使用します。
クリーンなパンくずリストを持つ企業サイト
ホームリンクで表示が煩雑にならないクリーンなパンくずリストを望む企業サイト。「ホームリンクを削除」を有効にして、パンくずリストが第1レベルのメニュー項目から直接始まるようにします。または「ホームタイトル」をサイト名に設定して、パンくずリストでより良いブランディングを実現します。
Tips
- このモジュールは高い優先度(1010)を持っているため、コアのタクソノミーパンくずリストビルダーより先に実行されます。別のモジュールに先にパンくずリストを処理させたい場合は、サービスの優先度を調整する必要があるかもしれません。
- 大規模な多言語サイトでのパフォーマンス向上のため、「RouteMatchからMenuActiveTrailを導出」を有効にして、グローバルなMenuActiveTrailサービスの使用を避けてください。
- ページが複数のメニューに存在する場合、設定でのメニューの順序がどのメニューが使用されるかを決定します。より重要なメニューをリストの上部にドラッグしてください。
- タクソノミー関連付けは、コンテンツタイプのフィールド一覧でエンティティ参照フィールドが表示される順序でタクソノミータームを検索します。間違ったタクソノミーが一致する場合はフィールドを並べ替えてください。
- このモジュールは、異なるページ間で適切なキャッシュ動作を確保するため、すべてのパンくずリストにurl.pathキャッシュコンテキストを追加します。
- タクソノミー関連付けを使用する場合、現在のページは実際にはメニュー上にないため、タクソノミータームのパンくずリストは「現在のページをリンクとして」設定に関係なく常にリンクとして表示されます。
- メニュー構造を変更した後はキャッシュをクリアして、パンくずリストが更新された階層を反映するようにしてください。
Technical Details
Admin Pages 1
/admin/config/user-interface/menu-breadcrumb
メニューベースのパンくずリストの生成方法を設定します。パンくずリスト生成に使用するメニューを選択し、現在のページとホームリンクの表示オプションを設定し、メニューに直接配置されていないページのためのタクソノミー関連付けを設定します。
Hooks 2
hook_help
管理ヘルプページと設定フォームページでモジュールのヘルプテキストを提供します。
hook_system_breadcrumb_alter
Menu Breadcrumbで処理されないページがキャッシュされたパンくずリストによって他のページを誤って置き換えることを防ぐため、すべてのパンくずリストにurl.pathキャッシュコンテキストを追加します。
Troubleshooting 7
Drupalキャッシュをクリアしてください。異なるモジュールバージョンは異なるサービス引数を使用しており、新しいサービス定義を認識するためにキャッシュを再構築する必要があります。/admin/config/development/performanceにアクセスして「すべてのキャッシュをクリア」をクリックするか、'drush cr'を実行してください。
以下を確認してください:1)タクソノミータームを含むメニューの設定で「タクソノミー関連付け」が有効になっている、2)コンテンツタイプにタクソノミータームを対象とするエンティティ参照フィールドがある、3)タクソノミータームが実際に有効なメニューに配置されている、4)フィールド値がノードに保存されている。
設定でメニューの優先順序を確認してください。優先するメニューをリストの上位(低いウェイト)にドラッグしてください。パスまたはタクソノミー関連付けが一致する最初の有効なメニューが使用されます。
各言語固有のメニューで「言語処理」を有効にしてください。これにより、メニューの言語が現在のコンテンツ言語と一致する場合にのみメニューが使用されるようになります。
設定で「現在のページをパンくずリストに追加」を有効にしてください。リンクとして表示したい場合は、「現在のページをリンクとして表示」も有効にしてください。
「空のURLを持つメニュー項目を除外」を有効にして、<none>を使用しているメニュー項目や空のリンクフィールドを持つメニュー項目をフィルタリングしてください。
「無効なメニュー項目を除外」を有効にして、メニューで有効になっていないメニュー項目をフィルタリングしてください。