Views Base URL
内部パス、クエリ文字列、フラグメントなどのカスタムパラメータに基づいて絶対内部URLを生成するViewsフィールドプラグインを提供します。
views_base_url
インストール
composer require 'drupal/views_base_url:^2.1'
概要
元々はViews Base URLという名前で、このモジュールはカスタムパラメータに基づいて絶対内部URLを生成するViewsフィールドを提供します。生成されるURLには、内部パス、クエリ文字列値、URLフラグメントを含めることができます。
このモジュールは2つのViewsフィールドプラグインを提供します:Global: Custom Internal URL(推奨)とGlobal: Base URL(非推奨)。両方のフィールドは、プレーンなURL文字列として出力するか、class、title、target、relなどのカスタマイズ可能な属性を持つ完全なHTMLリンクとしてレンダリングできます。
すべてのフィールド設定はTokenの置換パターンをサポートしており、View内の他のフィールド(Node ID、タイトルなど)からの動的な値をURL構築に使用できます。これは、行固有のデータに基づいて動的リンクを作成する際に特に便利です。
生成されるURLは自動的に現在のサイト言語を尊重し、多言語サイトで正しい言語コンテキストのリンクが生成されることを保証します。URLを生成する際にパスエイリアスも自動的に解決されます。
Features
- カスタマイズ可能なパス、クエリパラメータ、URLフラグメントを使用してViewsから絶対内部URLを生成
- Viewの他のフィールド値を使用した動的URL生成のためのToken置換パターンをサポート
- URLをプレーンテキストまたはカスタマイズ可能な属性(class、title、rel、target)を持つ完全なHTMLリンクとしてレンダリング
- 多言語サポートのため現在のサイト言語を自動的に尊重
- URL生成時にパスエイリアスを自動的に解決
- 2つのViewsフィールドプラグインを提供:Custom Internal URL(推奨)とBase URL(非推奨)
Use Cases
Viewsで動的な「続きを読む」リンクを作成
コンテンツ一覧Viewを構築する際、URLパスを「/node/{{ nid }}」に設定し、リンクテキストを「続きを読む」に設定したGlobal: Custom Internal URLフィールドを追加します。これにより、ニュースレター、RSSフィード、または通常のサイトコンテキスト外でViewが表示される場合でも正しく機能する、各コンテンツアイテムへの適切な絶対リンクが作成されます。
一覧リンクにクエリパラメータを追加
クリックの発生元を追跡したい商品カタログViewの場合、URLクエリフィールドに「source=catalog」を設定するか、「ref={{ nid }}」のようなTokenを使用します。これにより、分析やリファラー追跡のための各リンクにクエリパラメータが追加されます。
ページ内のアンカーリンクを作成
ページの特定のセクションにリンクするViewを構築する際、URLパスをページパスに設定し、URLフラグメントをセクションIDに設定します。例えば、パス「/faq」とフラグメント「question-{{ nid }}」で「/faq#question-42」のようなリンクが作成されます。
カスタム属性を持つ画像リンクを構築
Viewに画像フィールドを追加して表示から除外し、「リンクとしてレンダリング」を有効にしたCustom Internal URLフィールドを追加します。リンクテキストフィールドに画像フィールドのTokenを使用します。適切な画像リンク動作のために、class、title、rel='noopener'、target='_blank'などのリンク属性を設定します。
メールニュースレター対応リンク
Viewsの出力をメールニュースレターに埋め込む際、このモジュールが生成する絶対URLにより、ウェブサイトのコンテキスト外で表示された場合に壊れる可能性のある相対URLとは異なり、メールクライアントに関係なくリンクが正しく機能します。
複数のCSSクラスを持つリンクを作成
link_classフィールドに「btn btn-primary btn-lg」のようにスペースで区切られたクラス名を入力し、スタイリング目的で生成されたリンクに複数のCSSクラスを適用します。
Tips
- Base URLの代わりにCustom Internal URLフィールドを使用してください - これが推奨されるアプローチであり、より良くメンテナンスされます
- Tokenとして使用したいフィールドは、常にViewsのフィールド順序でURLフィールドの前に追加してください
- URLパスフィールドは、/node/123、/admin/content、/user/{{ uid }}など、/で始まる任意の有効なDrupal内部パスを受け入れます
- 「リンクとしてレンダリング」を使用する場合、link_textを空にするとフルURLがリンクテキストとして表示されます
- link_classフィールドにはスペースで区切って複数のCSSクラスを追加できます
- TokenパターンはTwig構文を使用します:{{ field_name }}(field_nameはView内のフィールドのマシン名と一致)
Technical Details
Hooks 1
hook_views_data_alter
hook_views_data_alter()を実装してカスタムViewsフィールドプラグインを登録します。グローバルな「views」テーブルに「base_url」と「custom_internal_url」フィールドを追加し、Views UIでGlobalフィールドとして利用可能にします。
Troubleshooting 5
Token値を含むフィールド(例:nid、title)がViewに追加され、フィールドの順序でCustom Internal URLフィールドの前に表示されていることを確認してください。フィールドは順番に処理され、後のフィールドからのTokenは前のフィールドでは利用できません。
モジュールは自動的にパスエイリアスを解決します。エイリアスが表示されない場合は、コンテンツのパスエイリアスが存在し、Path Aliasモジュールが有効になっていることを確認してください。最近追加したエイリアスが表示されない場合は、パスエイリアスキャッシュをクリアしてください。
サイトの言語検出とネゴシエーションが正しく設定されていることを確認してください。モジュールは現在の言語コンテキストを使用するため、リクエストに適切な言語プレフィックスがない場合、生成されるURLに期待する言語プレフィックスが含まれない可能性があります。
url_queryフィールドのフォーマットを確認してください。パラメータは「key=value」形式で、複数のパラメータはスペースまたは&文字で区切ります。先頭の「?」文字は含めないでください。
Base URLフィールドは非推奨ですが、まだ機能します。新しい実装には、同じ機能をよりクリーンな設定インターフェースで提供するCustom Internal URLフィールドを代わりに使用してください。