Ce crochet vous permettra de créer des jetons. Vous pouvez les créer dans la portée globale ou vous pouvez utiliser un objet comme un nœud ou un utilisateur pour amorcer les valeurs.
Vous devez également utiliser hook_token_list()pour expliquer ce que sont vos jetons.
Différemment du module Token, le code dans le noyau Drupal permet de créer le contenu d'un token uniquement lorsque cela est strictement nécessaire. Dans Drupal 6, le module Token demanderait aux modules implémentant les jetons toutes les valeurs de leur jeton utilisant hook_token_values(); cela signifie qu'un module peut calculer la valeur d'un jeton qui n'est alors pas requise pour les jetons à remplacer. Dans Drupal 7, l'implémentation de hook_tokens()reçoit $tokens, un tableau de jetons à remplacer, comme argument; le module est alors capable de calculer la valeur d'un jeton, sachant qu'il sera utilisé.
La fonction qui dans Drupal 7 est utilisée pour remplacer les jetons par leur valeur est token_replace () , qui est la seule fonction utilisée pour remplacer les jetons par leurs valeurs.
Autre différence entre le module Token pour Drupal 6 et le code dans Drupal 7:
Dans Drupal 7, [node: author] renvoie le nom de l'auteur; [node: author: mail] renvoie l'adresse e-mail associée à l'auteur d'un nœud, et [node: author: url] renvoie l'URL du profil utilisateur de l'auteur du nœud. En d'autres termes, il est possible d'utiliser [node: author: xyz], où "xyz" est l'un des jetons renvoyés pour un objet utilisateur.
Dans Drupal 7, il n'y a pas de jetons bruts; l'implémentation de hook_tokens()get un paramètre qui indique au hook quand le contenu du token doit être nettoyé; lorsque la valeur du jeton n'a pas besoin d'être filtrée, le contenu n'est pas transmis aux fonctions check_plain()ou filter_xss().
Dans Drupal 7, il n'y a aucune fonction qui affiche la liste des jetons disponibles. Si un module doit afficher la liste des jetons disponibles, il doit construire la liste des jetons lui-même et l'afficher dans la description d'un champ de formulaire; alternativement, il peut utiliser la fonction de thème toujours disponible dans le module Token.
Je voulais ajouter un nouveau jeton à la section Informations sur le site des jetons, appelé Nom de la ville . C'est ainsi que je l'ai fait dans Drupal 7.
Merci d'avoir fourni un exemple. Ils sont toujours utiles
iStryker
1
Ainsi , le jeton serait dans l' exemple ci - dessus: [site:city_name]. Assurez-vous d'effacer les caches ou de redémarrer memcached s'il est utilisé.
kenorb
Remarque: $sanitizedans l'exemple ci-dessus n'est pas défini, vous obtiendrez Notice: Undefined variableà ce sujet.
kenorb
@kenorb good eye, et je vois que cette réponse a depuis été mise à jour :)
WebMW
3
Pour Drupal 8, exemple d'utilisation de l'objet nœud:
Vous pouvez placer des jetons dans votre module à mymodule.tokens.inc en utilisant hook_token_info () pour les enregistrer et hook_tokens () pour les données de remplacement.
Si vous souhaitez créer un jeton personnalisé pour un type de jeton existant, tel que pour les nœuds, vous devrez placer votre jeton dans le sous-tableau dans hook_token_info (). Référez-vous à node.tokens.inc dans le module de noeud pour voir de quoi vous construisez.
// We need to include the needed class for tokens.useDrupal\Core\Render\BubbleableMetadata;/**
* Implements hook_token_info().
*/function modulename_token_info(){
$info = array();// Add any new tokens.
$info['tokens']['customtokentype']['customtoken']= t('Telling drupal that you define custom token');// Return them.return $info;}/**
* Implements hook_tokens().
*/function modulename_tokens($type, $tokens, array $data, array $options,BubbleableMetadata $bubbleable_metadata){
$replacements = array();
$simple = $data["customanything"];if($type =='customtokentype'){foreach($tokens as $name => $original){// Find the desired token by nameswitch($name){case'customtoken':
$new = $simple;
$replacements[$original]= $new;break;}}}// Return the replacements.return $replacements;}
Obtenir la valeur des jetons dans votre fonction nécessite un code similaire au suivant.
$token = \Drupal::token();
$message_html ="hello my custom token is replaced see it here [customtokentype:customtoken]";// Token data.
$data = array('customanything'=> $tosendtotokens);
$message_html = $token->replace($message_html, $data);
Réponses:
Dans Drupal 6, vous utilisez
hook_token_values()
.Ce crochet vous permettra de créer des jetons. Vous pouvez les créer dans la portée globale ou vous pouvez utiliser un objet comme un nœud ou un utilisateur pour amorcer les valeurs.
Vous devez également utiliser
hook_token_list()
pour expliquer ce que sont vos jetons.La documentation de token.api est assez claire.
Je ne publierai pas le tout, mais cela devrait vous donner une idée de haut niveau.
la source
Dans Drupal 7, le code de gestion des jetons fait partie du module de base Drupal.
Les hooks que les modules de jetons doivent implémenter sont:
D'autres modules peuvent modifier l'implémentation du jeton fournie à partir d'un module à l'aide de hook_token_info_alter () et hook_tokens_alter () .
Différemment du module Token, le code dans le noyau Drupal permet de créer le contenu d'un token uniquement lorsque cela est strictement nécessaire. Dans Drupal 6, le module Token demanderait aux modules implémentant les jetons toutes les valeurs de leur jeton utilisant
hook_token_values()
; cela signifie qu'un module peut calculer la valeur d'un jeton qui n'est alors pas requise pour les jetons à remplacer. Dans Drupal 7, l'implémentation dehook_tokens()
reçoit$tokens
, un tableau de jetons à remplacer, comme argument; le module est alors capable de calculer la valeur d'un jeton, sachant qu'il sera utilisé.La fonction qui dans Drupal 7 est utilisée pour remplacer les jetons par leur valeur est token_replace () , qui est la seule fonction utilisée pour remplacer les jetons par leurs valeurs.
Autre différence entre le module Token pour Drupal 6 et le code dans Drupal 7:
hook_tokens()
get un paramètre qui indique au hook quand le contenu du token doit être nettoyé; lorsque la valeur du jeton n'a pas besoin d'être filtrée, le contenu n'est pas transmis aux fonctionscheck_plain()
oufilter_xss()
.la source
Je voulais ajouter un nouveau jeton à la section Informations sur le site des jetons, appelé Nom de la ville . C'est ainsi que je l'ai fait dans Drupal 7.
la source
[site:city_name]
. Assurez-vous d'effacer les caches ou de redémarrer memcached s'il est utilisé.$sanitize
dans l'exemple ci-dessus n'est pas défini, vous obtiendrezNotice: Undefined variable
à ce sujet.Pour Drupal 8, exemple d'utilisation de l'objet nœud:
Vous pouvez placer des jetons dans votre module à mymodule.tokens.inc en utilisant hook_token_info () pour les enregistrer et hook_tokens () pour les données de remplacement.
Si vous souhaitez créer un jeton personnalisé pour un type de jeton existant, tel que pour les nœuds, vous devrez placer votre jeton dans le sous-tableau dans hook_token_info (). Référez-vous à node.tokens.inc dans le module de noeud pour voir de quoi vous construisez.
mymodule.tokens.inc:
la source
Pour Drupal 8
Obtenir la valeur des jetons dans votre fonction nécessite un code similaire au suivant.
la source
new
etsimple
dans cet exemple?