2010-02-15 5 views
2

j'ai besoin d'inclure un contenu de noeud dans un autre noeud en utilisant une sorte d'espace réservé, par exemple: [node-5663] seront traduits au contenu du nœud (corps) lorsque l'node-id 5663.Exemples Jeton Drupal d'utilisation

Le exemple ci-dessus est juste un exemple, ce dont j'ai besoin est en fait quelque chose comme ceci: [table-TABLE-ID]TABLE-ID sera un champ que je définis dans le nœud (en utilisant CCK).

Je n'ai aucun problème à chercher et à faire correspondre le contenu que je dois chercher, mais ce qui me manque, c'est comment utiliser les jetons.

Toute aide serait la bienvenue :)

Répondre

4

Alors que je suis un peu flou sur les détails exacts de ce que vous voulez, la prémisse de base est en fait assez simple.

Vous voulez construire un module personnalisé, qui définit simplement quelques jetons, semblable à ce qui suit:

/** 
* Implements hook_theme(). 
*/ 
function my_module_theme() { 
    return array(
    'my_module' => array(
     'arguments' => array('object' => NULL) 
    ), 
); 
} 

/** 
* Implements hook_token_list(). 
*/ 
function my_module_token_list($type = 'all') { 
    if ($type == 'node' || $type == 'all') { 
    $tokens = array(); 
    $tokens['my_module']['table-TABLE-ID'] = t('description'). 
    return $tokens; 
    } 
} 

/** 
* Implements hook_token_values(). 
*/ 
function my_module_token_values($type, $object = NULL) { 
    if ($type == 'node') { 
    ($table, $id) = explode('-', $object->my_field['value']); 
    $tokens['table-' . $object->my_field['value']] = theme('my_module', db_fetch_object(db_query("SELECT * FROM {" . $table . "} WHERE id = %d", $id))); 
    return $tokens; 
    } 
} 

function theme_my_module($object) { 
    return '<div>' . $object->content . '</div>'; 
} 

Note: Tout ce code est théorique et je peux à peu près l'état qu'il ne sera pas travail. Il est également très peu sûr de faire la requête db_query comme je l'ai fait ici (ce qui était mon interprétation de ce que vous vouliez), mais vous devriez avoir un jeton pour chaque type de requête que vous voulez ('table-node-ID', etc).

J'espère que c'est un peu utile.

+0

En note, si le jeton lui-même où placer le champ Body, vous aurez également besoin du filtre de jeton mo dule (http://drupal.org/project/token_filter) pour traduire le jeton. – Decipher

+0

Excellent, merci :) – Eli

+0

La réponse est pour Drupal 6. Dans Drupal 7, "hook_token_list() est maintenant [hook_token_info()] (http://api.drupal.org/api/drupal/modules--system-- system.api.php/function/hook_token_info/7), et hook_token_values ​​() est maintenant [hook_tokens()] (http://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_tokens/7) ", dit la [page du journal de mise à jour] (https://www.drupal.org/documentation/modules/token/update/6/7). – tanius

1

Si vous avez besoin d'accéder à des jetons d'un autre module dans php, un moyen rapide de le faire est avec la fonction drupal « token_replace (texte $) »

Vous transmettre le texte qui peut contenir le jeton et il sera renvoyer le texte avec le jeton remplacé.

exemple pour Drupal 7

<?php 
$tokentext = "I'm the ga_tokenizer:ga-term [ga_tokenizer:ga-term]"; 
$processedText = token_replace($tokentext); 
print $processedText; 
?> 

Affichera Je suis le ga_tokenizer: ga terme LE TERME DE RECHERCHE UTILISÉ POUR TROUVER LA PAGE

Si vous voulez juste la valeur du jeton , utilisez

<?php 
$tokentext = "[ga_tokenizer:ga-term]"; 
$processedText = token_replace($tokentext); 
?> 
+0

Les jetons '[ga_tokenizer: *]' ne fonctionnent que si le module [Google Analytics Tokenizer] (https://www.drupal.org/project/ga_tokenizer) est activé. Voir ce module, ou [la réponse de Decipher] (http://stackoverflow.com/a/2270062) ci-dessus pour savoir comment définir vos propres jetons avant utilisation. – tanius