Mit diesem Hook können Sie Token erstellen. Sie können sie im globalen Bereich erstellen oder Sie können ein Objekt wie einen Knoten oder einen Benutzer verwenden, um die Werte zu setzen.
Sie sollten auch verwenden hook_token_list(), um zu erklären, was Ihre Token sind.
Anders als im Token-Modul ermöglicht der Code in Drupal Core, den Inhalt eines Tokens nur dann zu erstellen, wenn dies unbedingt erforderlich ist. In Drupal 6 fragt das Token-Modul die Module, die Token implementieren, nach allen Werten für das Token, das sie verwenden hook_token_values(). Dies bedeutet, dass ein Modul den Wert für ein Token berechnen kann, der dann für die zu ersetzenden Token nicht benötigt wird. In Drupal 7 ist die Implementierung von hook_tokens()receive $tokensein Array von zu ersetzenden Tokens als Argument. Das Modul kann dann den Wert eines Tokens berechnen, da es weiß, dass er verwendet wird.
Die Funktion, mit der in Drupal 7 die Token durch ihren Wert ersetzt werden, ist token_replace (). Dies ist die einzige Funktion, mit der die Token durch ihre Werte ersetzt werden.
Weitere Unterschiede zwischen dem Token-Modul für Drupal 6 und dem Code in Drupal 7 sind:
In Drupal 7 gibt [node: author] den Namen des Autors zurück. [node: author: mail] gibt die E-Mail-Adresse zurück, die dem Autor eines Knotens zugeordnet ist, und [node: author: url] gibt die URL des Benutzerprofils für den Knotenautor zurück. Mit anderen Worten, es ist möglich, [node: author: xyz] zu verwenden, wobei "xyz" eines der Token ist, die für ein Benutzerobjekt zurückgegeben werden.
In Drupal 7 gibt es keine rohen Token. die Implementierung von hook_tokens()get einen Parameter, der dem Hook mitteilt, wann der Inhalt des Tokens bereinigt werden muss; Wenn der Token-Wert nicht bereinigt werden muss, wird der Inhalt nicht an die Funktionen check_plain()oder übergeben filter_xss().
In Drupal 7 gibt es keine Funktion, die die Liste der verfügbaren Token anzeigt. Wenn ein Modul die Liste der verfügbaren Token anzeigen muss, muss es die Liste der Token selbst erstellen und in der Beschreibung eines Formularfelds anzeigen. Alternativ kann die im Token-Modul noch verfügbare Theme-Funktion verwendet werden.
Vielen Dank für ein Beispiel. Sie sind immer hilfsbereit
iStryker
1
So ist das Zeichen in obigem Beispiel wäre: [site:city_name]. Stellen Sie sicher, dass Sie die Caches löschen oder memcached neu starten, falls verwendet.
Kenorb
Hinweis: $sanitizeIn obigem Beispiel ist nicht definiert, daher werden Sie darüber informiert Notice: Undefined variable.
Kenorb
@kenorb gutes Auge, und ich sehe, dass diese Antwort seitdem aktualisiert wurde :)
WebMW
3
Beispiel für Drupal 8 mit dem Knotenobjekt:
Sie können Tokens in Ihr Modul unter mymodule.tokens.inc einfügen, indem Sie hook_token_info () verwenden, um sie zu registrieren, und hook_tokens () für die Ersatzdaten.
Wenn Sie ein benutzerdefiniertes Token für einen vorhandenen Token-Typ erstellen möchten, z. B. für Knoten, müssen Sie Ihr Token in das Subarray in hook_token_info () einfügen. Unter node.tokens.inc im Knotenmodul erfahren Sie, woraus Sie bauen.
// 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;}
Um den Wert von Tokens in Ihrer Funktion zu ermitteln, ist ein Code ähnlich dem folgenden erforderlich.
$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);
Antworten:
In Drupal 6 verwenden Sie
hook_token_values()
.Mit diesem Hook können Sie Token erstellen. Sie können sie im globalen Bereich erstellen oder Sie können ein Objekt wie einen Knoten oder einen Benutzer verwenden, um die Werte zu setzen.
Sie sollten auch verwenden
hook_token_list()
, um zu erklären, was Ihre Token sind.Die token.api- Dokumentation ist ziemlich klar.
Ich werde das Ganze nicht veröffentlichen, aber das sollte dir eine gute Idee geben.
quelle
In Drupal 7 ist der Code für den Umgang mit Tokens Teil des Drupal-Kernmoduls.
Die Hooks, die die Token-Module implementieren müssen, sind:
Andere Module können die von einem Modul bereitgestellte Token-Implementierung mit hook_token_info_alter () und hook_tokens_alter () ändern .
Anders als im Token-Modul ermöglicht der Code in Drupal Core, den Inhalt eines Tokens nur dann zu erstellen, wenn dies unbedingt erforderlich ist. In Drupal 6 fragt das Token-Modul die Module, die Token implementieren, nach allen Werten für das Token, das sie verwenden
hook_token_values()
. Dies bedeutet, dass ein Modul den Wert für ein Token berechnen kann, der dann für die zu ersetzenden Token nicht benötigt wird. In Drupal 7 ist die Implementierung vonhook_tokens()
receive$tokens
ein Array von zu ersetzenden Tokens als Argument. Das Modul kann dann den Wert eines Tokens berechnen, da es weiß, dass er verwendet wird.Die Funktion, mit der in Drupal 7 die Token durch ihren Wert ersetzt werden, ist token_replace (). Dies ist die einzige Funktion, mit der die Token durch ihre Werte ersetzt werden.
Weitere Unterschiede zwischen dem Token-Modul für Drupal 6 und dem Code in Drupal 7 sind:
hook_tokens()
get einen Parameter, der dem Hook mitteilt, wann der Inhalt des Tokens bereinigt werden muss; Wenn der Token-Wert nicht bereinigt werden muss, wird der Inhalt nicht an die Funktionencheck_plain()
oder übergebenfilter_xss()
.quelle
Ich wollte dem Abschnitt Site-Informationen von Tokens einen neuen Token hinzufügen , der den Namen Stadt trägt . So habe ich es in Drupal 7 gemacht.
quelle
[site:city_name]
. Stellen Sie sicher, dass Sie die Caches löschen oder memcached neu starten, falls verwendet.$sanitize
In obigem Beispiel ist nicht definiert, daher werden Sie darüber informiertNotice: Undefined variable
.Beispiel für Drupal 8 mit dem Knotenobjekt:
Sie können Tokens in Ihr Modul unter mymodule.tokens.inc einfügen, indem Sie hook_token_info () verwenden, um sie zu registrieren, und hook_tokens () für die Ersatzdaten.
Wenn Sie ein benutzerdefiniertes Token für einen vorhandenen Token-Typ erstellen möchten, z. B. für Knoten, müssen Sie Ihr Token in das Subarray in hook_token_info () einfügen. Unter node.tokens.inc im Knotenmodul erfahren Sie, woraus Sie bauen.
mymodule.tokens.inc:
quelle
Für Drupal 8
Um den Wert von Tokens in Ihrer Funktion zu ermitteln, ist ein Code ähnlich dem folgenden erforderlich.
quelle
new
undsimple
in diesem Beispiel?