web-dev-qa-db-fra.com

Passer des paramètres avec des jetons

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 vraiment, 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 donc 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).

10
sleep-er

En utilisant Drupal 7, les modules peuvent facilement gérer des jetons similaires à [node: author: name], où la partie du token après node: author fait référence à un token utilisateur. A la différence 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 mettant en œuvre 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.

8
kiamlaluno