Token
利用可能なトークンを閲覧するためのユーザーインターフェースを提供し、DrupalのToken APIに不足しているコアトークンを追加します。
token
インストール
composer require 'drupal/token:8.x-1.16'
概要
Tokenモジュールは、Drupalコアのトークンシステムを2つの重要な方法で拡張します:トークンの閲覧と挿入のための包括的なユーザーインターフェースを提供し、Drupalコアに不足している多くの便利なトークンを追加します。
このモジュールには、すべての利用可能なトークンを展開可能な階層構造でタイプ別に整理して表示するインタラクティブなトークンツリーブラウザが含まれています。このブラウザはクリックで挿入する機能をサポートしており、ユーザーは任意のトークンをクリックしてテキストフィールドやCKEditor 5、TinyMCE、CodeMirrorなどのWYSIWYGエディタに自動的に挿入できます。
さらに、このモジュールは現在のページ情報、現在の日時、URL、配列、ランダム値、コンテンツタイプ、メニューリンク、メニュー、Book、Taxonomyの拡張、ファイルメタデータ、ユーザーロールなどのトークンを提供します。また、すべてのEntityフィールドに対するフィールドベースのトークンを追加し、DevelモジュールとEntityの実際のトークン値を表示するための連携機能も備えています。
Features
- 利用可能なトークンを発見するための展開/折りたたみ可能な階層構造を持つインタラクティブなトークンツリーブラウザ
- 複数のエディタをサポートするクリックで挿入機能:CKEditor 5、CKEditor、TinyMCE、CodeMirror、ネイティブテキストエリア
- 現在のページトークン:タイトル、URL、ページ番号、クエリ文字列パラメータ、インターフェース言語、コンテンツ言語
- 設定されたすべての日付フォーマットをサポートする現在の日付トークン
- 現在のユーザーIPアドレストークン
- URLトークン:パス、相対URL、絶対URL、短縮URL、エイリアスなしURL、URL引数
- 複数値データを扱うための配列トークン:最初、最後、カウント、逆順、キー、区切り文字で結合、特定の値へのアクセス
- ランダムトークン:乱数と設定可能なハッシュアルゴリズム
- Nodeの拡張:翻訳元、リビジョンログ、コンテンツタイプ、Bookページ、メニューリンク
- コンテンツタイプトークン:名前、マシン名、説明、Node数、編集URL
- メニューリンクトークン:ID、タイトル、URL、親、親の配列、ルート、メニュー、編集URL
- メニュートークン:名前、マシン名、説明、リンク数、編集URL
- Taxonomyの拡張:翻訳元、編集URL、親の配列、ルートターム、Vocabularyマシン名
- ファイルトークン:ベース名、拡張子、バイト単位の生サイズ
- ユーザートークン:キャンセルURL、ワンタイムログインURL、ユーザーロール配列
- Bookトークン:タイトル、作成者、ルートページ、親ページ、親の配列
- 画像スタイルトークン:MIMEタイプ、ファイルサイズ、サイズ、URI、URL
- 言語トークン:名前、言語コード、方向、ドメイン、パスプレフィックス
- モジュール開発者向けのEntityタイプからトークンタイプへのマッピングサービス
- Entityページで実際のトークン値を表示するDevelモジュール連携
- トークンキャッシュ用のDrushキャッシュクリアコマンド
- すべてのEntityリファレンス、テキスト、その他のフィールドタイプに対する自動フィールドトークン
Use Cases
メールテンプレートのパーソナライズ
トークンブラウザを使用して[current-user:display-name]、[site:name]、[current-date:long]などのトークンを発見し、メールテンプレートに挿入します。クリックで挿入機能により、正確な構文を覚えなくてもトークンを簡単に追加できます。
PathautoでのURLエイリアスパターン
PathautoのURLパターンを設定する際に、トークンブラウザを使用してコンテンツタイプ固有のパスに適したトークンを見つけます。例えば、[node:content-type:machine-name]/[node:title]を使用して整理されたURL構造を作成できます。
自動コンテンツ生成
[current-page:title]、[current-page:url:absolute]、[current-user:mail]などのトークンを自動ワークフロー、通知、動的コンテンツブロックで活用します。
開発者向けトークンの発見
Develモジュール連携を使用して、任意のEntityページで実際のトークン値を確認します。Nodeに移動し、DevelタブをクリックしてからTokensをクリックすると、その特定のコンテンツで利用可能なすべてのトークンとその解決済み値を確認できます。
複数値フィールドのトークン処理
配列トークンを使用して複数値フィールドを操作します:[node:field_tags:first]で最初の値、[node:field_tags:join:, ]ですべての値をカンマで結合、[node:field_tags:count]でアイテム数を表示できます。
パンくずリストとメニューの連携
メニューリンクトークンを使用してメニュー階層にアクセス:[node:menu-link:parents:join: > ]でパンくずリスト風のパスを作成、[node:menu-link:root:title]でトップレベルのメニューアイテムタイトルを取得できます。
ランダムコンテンツの生成
一意の識別子やキャッシュバスティングにランダムトークンを使用:[random:hash:md5]でランダムなMD5ハッシュを作成、[random:number]でランダムな整数を生成できます。
多言語トークンの処理
[current-page:interface-language:name]で現在のUIの言語、[current-page:content-language:langcode]でコンテンツの言語にアクセスでき、多言語サイト設定で便利です。
Tips
- Devel連携を使用して、特定のコンテンツで利用可能なトークンをすばやく発見できます。Develを有効にして、任意のEntityのTokensタブにアクセスするだけです。
- トークンブラウザのクリックで挿入機能はほとんどのWYSIWYGエディタで動作します。クリックする前にテキストフィールドにフォーカスがあることを確認してください。
- 配列トークンは複数値フィールドに強力です::first、:last、:count、:join:{separator}、:value:{key}を使用して特定の値にアクセスできます。
- トークンキャッシュはパフォーマンスを大幅に向上させます。カスタムトークンを開発する際はトークンキャッシュのクリアを忘れないでください。
- ツリービルダーは自己参照トークンタイプでの無限再帰を防ぐため、最大深度9レベルをサポートしています。
- ワンタイムログインURLなどのセキュリティに敏感なトークンについては、ブラウザでデフォルトで非表示になっている'restricted'トークンを探してください。
- [current-page:query:{key}]を使用して、トークン置換でURLクエリパラメータに動的にアクセスできます。
Technical Details
Admin Pages 2
/token/tree
すべての利用可能なトークンのインタラクティブなツリーを表示するAJAXエンドポイント。このページは通常、Drupal全体のフォームに埋め込まれたトークンブラウザダイアログからのAJAX呼び出しを介してアクセスされます。トークンは名前、トークンパターン、説明の列を持つ展開可能な階層構造でタイプ別に整理されて表示されます。クエリパラメータを介して特定のトークンタイプでのフィルタリングをサポートしています。
/token/flush-cache
トークン情報キャッシュをクリアする管理エンドポイント。'flush caches'権限が必要です。カスタムトークンが追加または変更され、更新が必要な場合に便利です。
Hooks 3
hook_token_info
利用可能なトークンタイプとトークンを定義します。Tokenモジュールはこのhookを実装して、current-page、current-date、array、random、url、menu-link、content-typeなど、Drupalコアに不足している多くのトークンを追加します。
hook_tokens
トークンの置換値を生成します。Tokenモジュールは、定義するすべてのトークンタイプに対してEntityリファレンス、日付、URL、配列などを処理する包括的なトークン生成を実装しています。
hook_token_info_alter
トークンタイプとトークンの定義を変更します。他のモジュールで定義されたトークンを変更、追加、または削除するために使用できます。
Drush Commands 1
drush cache:clear token
トークン情報キャッシュをクリアします。カスタムトークンを追加した後やトークン定義が変更された場合に便利です。
Troubleshooting 5
Tokenモジュールが有効になっていること、使用しているテキストフォーマットがトークン置換をサポートしていることを確認してください。一部のモジュールはトークン処理を有効にするために特定の設定が必要です。カスタムトークンを最近追加した場合は、'drush cc token'でトークンキャッシュをクリアしてください。
/token/flush-cacheまたは'drush cc token'でトークンキャッシュをクリアしてください。期待するトークンを提供するモジュールが有効になっていることを確認してください。トークンが'restricted'としてマークされている場合、デフォルトで非表示になっているかどうかを確認してください。
トークンをクリックする前にエディタにフォーカスがあることを確認してください。TokenモジュールはCKEditor 5、CKEditor、TinyMCE、CodeMirrorをサポートしています。別のエディタを使用している場合は、トークンを手動でコピーする必要がある場合があります。
Develモジュールがインストールされ有効になっている必要があります。ユーザーは'access devel information'権限を持っている必要があります。Entityタイプには'token-devel'リンクテンプレートが定義されている必要があります。
新しいトークンを定義した後にトークンキャッシュをクリアしてください。hook_token_info()が適切な構造の配列を返していることを確認してください。トークン定義にPHPエラーがないか確認してください。トークンを提供するモジュールが有効になっていることを確認してください。
Security Notes 4
- 一部のトークンは機密情報(ワンタイムログインURLやアカウントキャンセルリンクなど)を含むため、'restricted'としてマークされ、トークンブラウザでデフォルトで非表示になっています。
- /token/flush-cacheエンドポイントは、不正なキャッシュクリアを防ぐために'flush caches'権限が必要です。
- トークンツリーAJAXエンドポイントは、クロスサイトリクエストフォージェリ攻撃を防ぐために有効なCSRFトークンが必要です。
- DevelのTokensタブは'access devel information'権限が必要であり、開発環境でのみ有効にすべきです。