Passer des paramètres avec des jetons

10

Est-il possible d'envoyer des paramètres avec des jetons?

J'ai un module qui définit les mod1_info et mod1_tokens. Si j'entre% token: mod1: test sur une page, il est remplacé par <a href='test.html'></a>.

Ce que je veux réellement, c'est entrer% token: mod1: test [variable] et obtenir <a href='test.html'>variable</a>.

Est-ce possible?

Dans les coulisses, le test.html est en cours de construction avec quelques paramètres dynamiques de sorte qu'il ressemble en fait à test.html? Param1 = foo & param2 = bar . Ce dont j'ai besoin, c'est d'un moyen pour quelqu'un qui édite le site d'insérer un jeton sur n'importe quelle page et de pouvoir spécifier ce qui apparaît comme lien (une image, du texte ou les deux).

dormeur
la source
1
Malheureusement, je ne pense pas que ce soit possible. D'un autre côté, je ne comprends pas très bien le cas d'utilisation, car je n'en ai jamais eu besoin moi-même. Peut-être que si vous développez ce que vous voulez, une suggestion différente peut être suggérée.
Letharion

Réponses:

8

En utilisant Drupal 7, les modules peuvent facilement gérer des jetons similaires à [nœud: auteur: nom], où la partie du jeton après nœud: auteur fait référence à un jeton utilisateur. Différemment du module Token pour Drupal 6, le code qui dans Drupal 7 gère les jetons permet la création de jetons dynamiques. En effet, sur Drupal 7, les modules implémentant des jetons peuvent remplacer n'importe quel jeton, pas seulement les jetons qu'ils ont définis. La boucle normale utilisée dans hook_tokens () est la suivante.

foreach ($tokens as $name => $original) {
  // Check the value of $name, and generate the replacement that is assigned to
  // $replacements[$original].
}

En utilisant le code suivant, vous pouvez obtenir ce que vous essayez de réaliser. Cependant, les jetons ont un format spécifique, différent de celui que vous décrivez. Le code n'a pas été testé.

function mymodule_token_info() {
  $type = array(
    'name' => t('Anchors'), 
    'description' => t('Your description'), 
  );

  return array(
    'types' => array('anchor' => $type), 
  );
}

function mymodule_tokens($type, $tokens, array $data = array(), array $options = array()) {
  $replacements = array();
  $sanitize = !empty($options['sanitize']);

  if ($type == 'anchor') {
    foreach ($tokens as $name => $original) {
      list($file, $title) = explode(':', $name);
      if (!empty($title) && !empty($_GET[$title])) {
        $title = $_GET[$title];
      }
      else {
        $title = '';
      }

      $replacements[$original] = "<a href='$file.html'>$title</a>";
    }
  }

  return $replacements;
}

Le remplacement des jetons est si spécifique que je ne pense pas que vous trouverez un module qui le fasse. Votre seule possibilité est un module personnalisé que vous écrivez.

kiamlaluno
la source