Übergeben Sie Parameter mit Token

10

Ist es möglich, Parameter zusammen mit Token zu senden?

Ich habe ein Modul, das die mod1_info und mod1_tokens definiert. Wenn ich% token: mod1: test auf einer Seite eingebe, wird es durch ersetzt <a href='test.html'></a>.

Eigentlich möchte ich% token: mod1: test [variable] eingeben und get <a href='test.html'>variable</a>.

Ist das möglich?

Hinter den Kulissen wird die Datei test.html mit einigen dynamischen Parametern erstellt, sodass sie tatsächlich der Datei test.html ähnelt? Param1 = foo & param2 = bar . Was ich brauche, ist eine Möglichkeit für jemanden, der die Site bearbeitet, ein Token auf einer beliebigen Seite einzufügen und anzugeben, was als Link angezeigt wird (ein Bild, ein Text oder beides).

Schläfer
quelle
1
Leider glaube ich nicht, dass dies möglich ist. Andererseits verstehe ich den Anwendungsfall nicht ganz, da ich ihn selbst nie gebraucht habe. Wenn Sie das erweitern, was Sie möchten, kann möglicherweise ein anderer Vorschlag vorgeschlagen werden.
Letharion

Antworten:

8

Mit Drupal 7 können Module problemlos Token verarbeiten, die [node: author: name] ähneln, wobei sich der Teil des Tokens nach node: author auf ein Benutzertoken bezieht. Anders als beim Token-Modul für Drupal 6 ermöglicht der Code, der in Drupal 7 die Token verarbeitet, die Erstellung dynamischer Token. Dies liegt daran, dass in Drupal 7 Module, die Token implementieren, jedes Token ersetzen können, nicht nur die von ihnen definierten Token. Die in hook_tokens () verwendete normale Schleife ist die folgende.

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

Mit dem folgenden Code können Sie das erreichen, was Sie erreichen möchten. Tokens haben ein bestimmtes Format, das sich jedoch von dem von Ihnen beschriebenen unterscheidet. Der Code wurde nicht getestet.

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

Der Ersatz für die Token ist so spezifisch, dass ich nicht glaube, dass Sie ein Modul finden werden, das dies tut. Ihre einzige Möglichkeit ist ein benutzerdefiniertes Modul, das Sie schreiben.

kiamlaluno
quelle