2010-05-10 3 views
4

J'ai Pathauto configuré pour générer un alias basé sur le titre d'un nœud, pour un type de contenu spécifique. Le problème est que je veux faire de petits changements dans ce titre avant que Pathauto ne l'utilise pour générer l'alias.Dans Drupal, comment changer les valeurs transmises à Pathauto?

Le premier commentaire dans this post suggère l'utilisation de hook_token_values, mais je ne pouvais pas vraiment comprendre comment l'utiliser, même après avoir lu le docs. Dans mes tests, quand j'implémente ce hook, l'alias généré est toujours "array", ce qui veut dire qu'il me manque quelque chose.

Une aide? Merci.

+0

Pourriez-vous être plus précis sur ce que vous n'avez pas compris (peut-être poster votre code de test comme échantillon)? –

Répondre

5

Il se peut que vous ayez omis d'implémenter également hook_token_list. Fournir un nouveau jeton est un processus en deux étapes:

  1. Implémentez hook_token_list pour déclarer les jetons que vous allez fournir. Ce sera juste le nom des jetons, avec une courte explication, et les informations sur le type d'objets que les jetons vont appliquer (par exemple, nœud, utilisateur, taxinomie, ...)
  2. Mettre en œuvre pour générer le contenu des jetons. Cela sera appelé quand les jetons doivent être remplacés par le contenu qu'ils doivent représenter.

Comme vous voulez juste fournir une version alternative du jeton de titre déjà fourni par le module jeton, il est probablement préférable de copier uniquement les parties pertinentes de token_node.inc, Bx_boom les cas pertinents et adaptés à être utilisé dans un autre module:

/** 
* 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; 
    } 
} 

Cela dit simplement que yourModule fournit un jeton pour les objets de nœud, nommé yourModule-title, ainsi qu'une courte description. Le travail principal se fait dans l'autre crochet:

/** 
* 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; 
} 

Ce sera appelé à chaque fois que les jetons pour les objets de nœud sont nécessaires, avec le noeud en question étant passé en tant que paramètre $object (pour un jeton d'utilisateur, le $type serait être 'utilisateur', et $object serait l'objet utilisateur, et ainsi de suite pour les autres types). Ce qu'il fait est de créer un tableau de valeurs, clé par le nom de jeton, avec le remplacement de ce jeton comme valeur. Le code original de token_node.inc exécute simplement le titre à travers check_plain(), donc ce serait l'endroit pour insérer votre propre logique.

1

Dans Drupal 7, la fonctionnalité de jeton a été déplacée vers le noyau. Les jetons sont implémentés par les méthodes hook_tokens et hook_token_info. Pour les exemples d'utilisation, suivez les liens fournis et recherchez les liens vers les fonctions qui implémentent hook_tokens et hook_token_info & hellip; J'ai trouvé les fonctions statistics_tokens et statistics_token_info utiles pour comprendre comment fonctionne ce hook.

Il est probablement aussi intéressant de noter que ce hook doit être implémenté par un module & hellip; ma première tentative j'ai laissé tomber mes fonctions de test dans le template.php du thème, seulement pour n'avoir rien du tout :-p

Questions connexes