Views Token Argument
Drupal Viewsでトークンをコンテキストフィルター(引数)として使用でき、現在のユーザーやエンティティの値に基づく動的なフィルタリングを実現します。
views_argument_token
インストール
composer require 'drupal/views_argument_token:^2.0'
概要
Views Token Argumentは、トークンをコンテキストフィルターの値として使用できる強力な引数デフォルトプラグインを提供することで、Drupal Viewsを拡張します。これにより、Viewsは現在のユーザーや現在のページに関連するエンティティからのトークン値に基づいて、コンテンツを動的にフィルタリングできます。
このモジュールは、パーソナライズされたコンテンツ表示を作成する際に特に便利です。例えば、現在のユーザーがプロフィールで選択したカテゴリに関連するコンテンツを表示したり、現在表示しているノードとタクソノミータームを共有するコンテンツを表示したりできます。
主な機能として、現在のユーザートークンと現在のエンティティトークン(node/xページでの現在のノードなど)の両方の処理、フォーマットされた出力ではなく生のフィールド値の抽出、AND/OR演算子による複数値の処理、最終的な処理値を確認するためのデバッグモードがあります。
Features
- Viewsのコンテキストフィルターのデフォルト値としてトークンを使用(例:[current-user:uid]、[node:nid])
- ログインユーザーに基づいてViewsをパーソナライズするための現在のユーザートークンのサポート
- ページコンテキストからの現在のエンティティトークンのサポート(Node、User、Taxonomy Termなど)
- Tokenモジュールが提供するフォーマット済み/リンク付き出力ではなく、生のフィールド値を抽出するオプション
- 複雑なフィルタリングのためのAND/OR演算子を設定可能な複数値の処理
- 値が見つからない場合に「all」引数にフォールバックし、Viewsがすべての結果を表示できるようにする機能
- トラブルシューティング用に最終的なトークン処理値を表示するデバッグモード
- パーソナライズされたViewsの適切なキャッシュのための自動キャッシュコンテキスト処理
Use Cases
ユーザーのタクソノミー設定に基づくパーソナライズドコンテンツ
ユーザープロフィールに興味を表すタクソノミータームへのエンティティ参照フィールドがある場合、Tokenプラグインでコンテキストフィルターのデフォルト値として[current-user:field_interests]を使用することで、同じタクソノミータームでタグ付けされたコンテンツを表示するViewを作成できます。これにより、ユーザーの興味に一致するコンテンツのみを表示するパーソナライズされたフィードが作成されます。
ノードページの関連コンテンツブロック
現在表示しているノードと同じカテゴリの他のコンテンツを表示する「関連記事」ブロックを表示します。カテゴリタクソノミーフィールドにコンテキストフィルターを設定したViewを構成し、トークン引数デフォルトとして[node:field_category]を使用します。Viewは自動的にフィルタリングして、同じカテゴリを共有するコンテンツを表示します。
ユーザー自身のコンテンツダッシュボード
現在のユーザーが作成したすべてのコンテンツを表示するダッシュボードViewを作成します。作成者コンテキストフィルターのトークンとして[current-user:uid]を使用します。これにより、追加の設定なしでユーザーが自分のコンテンツのみを見ることができます。
ユーザーの組織別コンテンツ
ユーザーのプロフィールに組織参照フィールドがある場合、同じ組織に属するコンテンツを表示します。[current-user:field_organization]を使用してViewの組織コンテキストフィルターをフィルタリングし、ユーザーの組織に関連するコンテンツのみを表示します。
複数値タクソノミーフィルタリング
ユーザーがプロフィールで複数のタクソノミータームを選択している場合、それらのタームのいずれか(OR)またはすべて(AND)に一致するコンテンツを表示します。複数値処理オプションを設定して、Viewが選択されたタームのいずれかに一致するコンテンツを表示するか、すべてのタームに一致するコンテンツのみを表示するかを制御します。
Tips
- エンティティ参照フィールドでフィルタリングする場合は、常に「生の値を処理」オプションを有効にしてください。デフォルトのトークン出力はフィルタリングに必要なIDではなく、リンク付きタイトルになるためです。
- 開発中はデバッグモードを使用して、本番環境にデプロイする前にトークンが期待される値に解決されているかを確認してください。
- 「空の場合はallを送信」オプションを使用する場合は、コンテキストフィルターの「例外」セクションで「all」例外を設定していることを確認してください。
- 現在のユーザーに依存するトークン引数を持つViewsでは、他のユーザーからのキャッシュ結果が表示されないよう、Viewsのキャッシュが適切に設定されていることを確認してください。
- 複数のトークンベースのコンテキストフィルターを組み合わせて、さまざまなユーザーやエンティティ属性に基づく高度にパーソナライズされたコンテンツ表示を作成できます。
Technical Details
Hooks 1
hook_help
hook_help()を実装し、管理ヘルプページでモジュールのヘルプテキストを提供します。
Troubleshooting 4
Tokenモジュールがインストールされ有効になっていることを確認してください。トークンブラウザを使用してトークン構文が正しいことを確認してください。トークンコンテキストが利用可能なページにいることを確認してください(例:[node:*]トークンはノードページにいる必要があります)。
デバッグモードを有効にして、実際に使用されている値を確認してください。エンティティ参照フィールドを使用している場合は、「生の値を処理」を有効にして、フォーマットされたタイトルではなくエンティティIDを取得してください。現在のページコンテキストでトークンが利用可能であることを確認してください。
トークンが空の値に解決されていないか確認してください。「空の場合はallを送信」が有効になっている場合、空のトークン値はすべてのコンテンツを表示する結果になります。このオプションを無効にするか、トークンに値があることを確認してください。
モジュールは自動的にキャッシュコンテキストを追加しますが、Viewsのキャッシュ設定を確認してください。ユーザー固有のコンテンツの場合は、キャッシュがユーザーごとに変化することを確認してください。高度にパーソナライズされたViewsでは、Views結果キャッシュを無効にすることを検討してください。