web-dev-qa-db-fra.com

Utiliser le filtre à jetons par programme

J'essaie d'utiliser le filtre à jetons par programme dans un fichier .theme comme ça.

function mytheme_preprocess_block(&$vars){
  $token = Drupal::token();
  $vars['label'] = $token->replace('[node:title]');
}

J'ai regardé https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Utility%21Token.php/function/Token%3A%3Areplace/8.2.x pour information. Cependant, lorsque je génère $ vars ['label'], tout ce qu'il produit est [node: title] comme si aucun remplacement ne s'était produit. Comment initier par programme le filtre de jetons?

MISE À JOUR: En tant que test, j'ai essayé d'utiliser une autre méthode de jeton pour m'assurer que tout se passait en utilisant $token->scan('[node:title]'); et cela a craché

array (1) {["node"] => array (1) {["title"] => string (12) "[node: title]"}}

Je sais donc que j'ai correctement invoqué la classe de jetons

MISE À JOUR: Il semble que le remplacement de jeton fonctionnait, il n'a tout simplement pas reconnu [node: title]. L'utilisation de [site: nom] a produit le résultat attendu. Comment pourrais-je faire fonctionner [node: title]? Dois-je lui fournir ces données?

3
Matt

Les données sur le nœud devaient être fournies en tant que paramètre à la méthode de remplacement. Cela a fonctionné une fois que j'ai utilisé

$node = \Drupal::routeMatch()->getParameter('node');
$vars['label'] = $token->replace($vars['label'],['node' => $node]);
3
Matt