A diferencia del módulo Token, el código en el núcleo de Drupal permite crear el contenido de un token solo cuando es estrictamente necesario. En Drupal 6, el módulo Token solicitaría a los módulos que implementan tokens todos los valores para su token hook_token_values(); Esto significa que un módulo puede calcular el valor de un token que luego no es necesario para reemplazar los tokens. En Drupal 7, la implementación de hook_tokens()recibe $tokens, una matriz de tokens para ser reemplazados, como argumento; el módulo puede calcular el valor de un token, sabiendo que se usará.
La función que en Drupal 7 se usa para reemplazar los tokens con su valor es token_replace () , que es la única función utilizada para reemplazar los tokens con sus valores.
Otra diferencia entre el módulo Token para Drupal 6 y el código en Drupal 7 es:
En Drupal 7, [nodo: autor] devuelve el nombre del autor; [nodo: autor: correo] devuelve la dirección de correo electrónico asociada con el autor de un nodo, y [nodo: autor: url] devuelve la URL del perfil de usuario para el autor del nodo. En otras palabras, es posible usar [nodo: autor: xyz], donde "xyz" es uno de los tokens devueltos para un objeto de usuario.
En Drupal 7, no hay tokens sin procesar; la implementación de hook_tokens()obtener un parámetro que le dice al gancho cuándo se debe desinfectar el contenido del token; cuando no es necesario desinfectar el valor del token, el contenido no se pasa a las funciones check_plain()o filter_xss().
En Drupal 7, no hay ninguna función que muestre la lista de tokens disponibles. Si un módulo necesita mostrar la lista de tokens disponibles, debe construir la lista de los tokens y mostrarla en la descripción de un campo de formulario; alternativamente, puede usar la función de tema aún disponible en el módulo Token.
Así que el token sería en el ejemplo anterior: [site:city_name]. Asegúrese de borrar las memorias caché o reinicie memcached si se usa.
kenorb
Nota: $sanitizeen el ejemplo anterior no está definido, por lo que obtendrá Notice: Undefined variableinformación al respecto.
kenorb
@kenorb buen ojo, y veo que esta respuesta se ha actualizado desde entonces :)
WebMW
3
Para Drupal 8, ejemplo usando el objeto nodo:
Puede colocar tokens en su módulo en mymodule.tokens.inc usando hook_token_info () para registrarlos y hook_tokens () para los datos de reemplazo.
Si desea crear un token personalizado para un tipo de token existente, como para los nodos, deberá colocar su token dentro del subconjunto dentro de hook_token_info (). Consulte node.tokens.inc en el módulo de nodos para ver de qué está construyendo.
// 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;}
Obtener el valor de los tokens en su función requiere un código similar al siguiente.
$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);
Respuestas:
En Drupal 6, usas
hook_token_values()
.Este gancho te permitirá crear tokens. Puede crearlos en el ámbito global o puede usar un objeto como un nodo o un usuario para sembrar los valores.
También deberías usar
hook_token_list()
para explicar cuáles son tus tokens.La documentación de token.api es bastante clara.
No publicaré X todo, pero eso debería darte una idea de alto nivel.
fuente
En Drupal 7, el código para manejar tokens es parte del módulo principal de Drupal.
Los ganchos que los módulos de token deben implementar son:
Otros módulos pueden alterar la implementación del token proporcionada desde un módulo usando hook_token_info_alter () y hook_tokens_alter () .
A diferencia del módulo Token, el código en el núcleo de Drupal permite crear el contenido de un token solo cuando es estrictamente necesario. En Drupal 6, el módulo Token solicitaría a los módulos que implementan tokens todos los valores para su token
hook_token_values()
; Esto significa que un módulo puede calcular el valor de un token que luego no es necesario para reemplazar los tokens. En Drupal 7, la implementación dehook_tokens()
recibe$tokens
, una matriz de tokens para ser reemplazados, como argumento; el módulo puede calcular el valor de un token, sabiendo que se usará.La función que en Drupal 7 se usa para reemplazar los tokens con su valor es token_replace () , que es la única función utilizada para reemplazar los tokens con sus valores.
Otra diferencia entre el módulo Token para Drupal 6 y el código en Drupal 7 es:
hook_tokens()
obtener un parámetro que le dice al gancho cuándo se debe desinfectar el contenido del token; cuando no es necesario desinfectar el valor del token, el contenido no se pasa a las funcionescheck_plain()
ofilter_xss()
.fuente
Quería agregar un nuevo token a la sección de tokens de información del sitio , llamado Nombre de la ciudad . Así es como lo hice en Drupal 7.
fuente
[site:city_name]
. Asegúrese de borrar las memorias caché o reinicie memcached si se usa.$sanitize
en el ejemplo anterior no está definido, por lo que obtendráNotice: Undefined variable
información al respecto.Para Drupal 8, ejemplo usando el objeto nodo:
Puede colocar tokens en su módulo en mymodule.tokens.inc usando hook_token_info () para registrarlos y hook_tokens () para los datos de reemplazo.
Si desea crear un token personalizado para un tipo de token existente, como para los nodos, deberá colocar su token dentro del subconjunto dentro de hook_token_info (). Consulte node.tokens.inc en el módulo de nodos para ver de qué está construyendo.
mymodule.tokens.inc:
fuente
Para Drupal 8
Obtener el valor de los tokens en su función requiere un código similar al siguiente.
fuente
new
ysimple
en este ejemplo?