私は.themeファイル内でプログラム的にトークンフィルターを使用しようとしています。
_function mytheme_preprocess_block(&$vars){
$token = Drupal::token();
$vars['label'] = $token->replace('[node:title]');
}
_
私は https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Utility%21Token.php/function/Token%3A%3Areplace/8.2.x を見ました情報。しかし、$ vars ['label']を出力すると、置換がまったく発生しなかったかのように、[node:title]が生成されます。プログラムでトークンフィルターを開始するにはどうすればよいですか?
更新:テストとして、$token->scan('[node:title]');
を使用して何かが起こっていることを確認するために別のトークンメソッドを使用しようとしましたが、吐き出しました
array(1){["node"] => array(1){["title"] => string(12) "[node:title]"}}
だから私は少なくともトークンクラスを適切に呼び出したことを知っています
更新:トークンの置換が機能していたようですが、[node:title]を認識しませんでした。 [site:name]を使用しても、期待どおりの結果が得られました。 [node:title]を機能させるにはどうすればよいですか?そのデータを提供する必要がありますか?
ノードに関するデータは、replaceメソッドのパラメーターとして指定する必要がありました。一度使ったらうまくいった
$node = \Drupal::routeMatch()->getParameter('node');
$vars['label'] = $token->replace($vars['label'],['node' => $node]);