Pregunta

Tengo Pathauto configurado para generar un alias basado en el título de un nodo, para un tipo de contenido específico. El problema es que quiero hacer pequeños cambios en este título antes de que Pathauto lo use para generar el alias.

El primer comentario en esta publicación sugiere el uso de Hook_Token_Values, pero realmente no pude entender cómo usarlo, incluso después de leer el documentos. En mis pruebas, cuando implemento este gancho, el alias generado siempre es "matriz", lo que significa que me falta algo.

¿Alguna ayuda? Gracias.

¿Fue útil?

Solución

Puede ser que te perdieras implementar hook_token_list también. Proporcionar un nuevo token es un proceso de dos pasos:

  1. Implementar hook_token_list para declarar los tokens que va a proporcionar. Este será solo el nombre de los tokens, junto con una breve explicación, y la información de qué tipo de objetos aplicarán los tokens (por ejemplo, nodo, usuario, taxonomía, ...)
  2. Implementar hook_token_value para generar realmente el contenido de los tokens. Esto se llamará cuando los tokens se reemplazarán con el contenido que deben representar.

Como solo desea proporcionar una versión alternativa del token de título ya proporcionado por el módulo token, probablemente sea mejor copiar las porciones relevantes de token_node.inc, despojadas a los casos relevantes y ajustados para ser utilizados en otro módulo:

/**
 * Implementation of hook_token_list().
 */
function yourModule_token_list($type = 'all') {
  if ($type == 'node' || $type == 'all') {
    $tokens['node']['yourModule-title'] = t('Node title (customized version by yourModule)');

    return $tokens;
  }
}

Esto simplemente dice que yourModule proporciona un token para objetos de nodo, nombrado yourModule-title, junto con una breve descripción. El trabajo principal se realiza en el otro gancho:

/**
 * Implementation of hook_token_values().
 */
function yourModule_token_values($type, $object = NULL, $options = array()) {
  $values = array();
  switch ($type) {
    case 'node':
      $node = $object;
      // TODO: Replace the check_plain() call with your own token value creation logic!
      $values['yourModule-title'] = check_plain($node->title);  
      break;
  }

  return $values;
}

Esto se llamará cada vez que se necesitan los tokens para los objetos de nodo, con el nodo en cuestión que se pasa como el $object parámetro (para un token de usuario, el $type sería 'usuario', y $object sería el objeto de usuario, y así sucesivamente para otros tipos). Lo que hace es crear una variedad de valores, con el nombre del token, con el reemplazo de ese token como valor. El código original de token_node.inc solo ejecuta el título a través de check_plain(), entonces este sería el lugar para insertar su propia lógica.

Otros consejos

En Drupal 7, la funcionalidad del token se ha movido al núcleo. Los tokens son implementados por el Hook_tokens y Hook_token_info métodos. Para ejemplos de uso, siga los enlaces proporcionados y busque enlaces a las funciones que implementan Hook_Tokens y Hook_Token_info ... Encontré el statistics_tokens y statistics_token_info Funciones útiles para comprender cómo funciona este gancho.

Probablemente también valga la pena señalar que este gancho debe ser implementado por un módulo ... Mi primer intento dejé mis funciones de prueba en la plantilla.php del tema, solo para que no tenga nada que suceda :-P

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top