Como crear Tokens en Drupal 6

Los tokens son pequeñas cadenas de texto que cuando se ejecutan en algún proceso son sustituidas por valores. Pensemos por ejemplo en el módulo rules que queremos que el autor de un nodo reciba una copia del nodo que acaba de publicar, en este caso utilizamos un token [user-author] para indicarle a Drupal que el autor del nodo es el receptor del correo electrónico.

Pedro explicó en su día como añadir tokens en Drupal 5 (http://cambrico.net/drupal/como-anadir-nuevos-token-en-drupal) vamos a ver las opciones que existen hoy día para crear tokens en Drupal 6.

Esto son breves apuntes, no un artículo detallado, pero los apuntes y los ejemplos de los mismos son lo suficientemente explicativos como para ponerse a crear tokens.

Para Drupal 6 tenemos 2 opciones, la primera opción es crear tokens con el módulo custon tokens (http://drupal.org/project/token_custom) el cual nos pregunta los siguientes elementos:

  • Token ID: es el nombre de Drupal para identificar al token
  • Descripción
  • Tipo: el tipo de información que mostrara: Global, Nodo, Usuario, Taxonomía, Comentario
  • PHP replacement: código de php que genera el token

Un ejemplo de código php usando con el módulo custom token:

<?php
$myRole
= "Editor";

$roleSQL = "SELECT * FROM {users} WHERE uid IN (SELECT uid FROM {users_roles} WHERE rid=(SELECT rid FROM {role} WHERE name='%s'))";
$roles = db_query($roleSQL, $myRole);
while(
$role = db_fetch_array($roles)) {
 
$usersinrole[] = $role['mail'];
}
if(
count($usersinrole) > 0) {
  print
implode(",",$usersinrole);
}
?>

Con esto podemos generar nuestros propios tokens, siempre y cuando tengamos el módulo custom tokens instalado.

Si no queremos instalar el módulo custom tokens, o estamos programando nuestro própio módulo podemos crear nuestros propios tokens utilizando los hooks:
hook_token_list
hook_token_values.

El hook_token_list nos permite indicar a Drupal cuales son los nuevos tokens que generamos. Un ejemplo:

<?php
function demo_token_token_list($type = 'all') {
  if (
$type == 'demo_token' || $type == 'all') {
   
$tokens['demo_token']['age-account'] = t("Age of the account (in days)");
   
$tokens['demo_token']['last-login'] = t("Last login of the user");
   
$tokens['demo_token']['role-count'] = t("Role of the user");
    return
$tokens;
  }
}
?>

(la fuente del código es: http://cambrico.net/drupal/como-anadir-nuevos-token-en-drupal)

El hook_token_values nos permite añadirle los valores a los tokens que hemos creado en el hook_token_list. Un ejemplo:

<?php
function demo_token_token_values($type = 'all', $object = NULL) {
 
$values = array();
  if (
$type == 'demo_token' && is_object($object)) {       
   
$sql = "SELECT DATE_FORMAT(from_unixtime(login),'%Y-%m-%e') last_login ,
      period_diff(DATE_FORMAT(now(),'%Y%m%e'),
      DATE_FORMAT(from_unixtime(created),'%Y%m%e')) age_in_days
      FROM {users} u WHERE uid = %d"
;
   
$dates = db_fetch_object(db_query($sql, $object->uid));
   
$sql = "SELECT count(*) FROM {users_roles} WHERE uid = %d";
   
$user_roles = db_result(db_query($sql, $object->uid));
   
$values['age-account'] = (string)$dates->age_in_days;
   
$values['last-login']  = (string)$dates->last_login;
   
$values['role-count']  = $user_roles;
  }
  return
$values;
}
?>

(la fuente del código es: http://cambrico.net/drupal/como-anadir-nuevos-token-en-drupal)

Como se puede ver, el hook_token_xxx es idéntico para d5 y d6,en d7 tokens es parte del core de Drupal, y esperemos que no cambie mucho :)

Un saludo

Oskar

Trackback URL for this post:

http://documentados.com/trackback/276

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Allowed HTML tags: <a> <em> <strong> <cite> <strike> <code> <ul> <ol> <li> <dl> <dt> <dd><img><p><div><blockquote>
  • Saltos automáticos de líneas y de párrafos.
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.

Más información sobre opciones de formato

CAPTCHA
Esto es para evitar spam, y ver que eres humano :)