Передать параметры с токенами

10

Можно ли отправить параметры вместе с токенами?

У меня есть модуль, который определяет mod1_info и mod1_tokens. Если я введу% token: mod1: test на странице, он будет заменен на <a href='test.html'></a>.

На самом деле я хочу ввести% token: mod1: test [variable] и получить <a href='test.html'>variable</a>.

Это возможно?

За кулисами test.html создается с несколькими динамическими параметрами, поэтому он на самом деле похож на test.html? Param1 = foo & param2 = bar . Мне нужен способ, чтобы кто-то, редактируя сайт, мог вставить токен на любую страницу и иметь возможность указать, что будет отображаться в виде ссылки (изображение, текст или оба).

сон-эр
источник
1
К сожалению, я не верю, что это возможно. С другой стороны, я не совсем понимаю вариант использования, так как сам никогда в этом не нуждался. Возможно, если вы расширите то, что вы хотите, можно предложить другое предложение.
Летарион

Ответы:

8

Используя Drupal 7, модули могут легко обрабатывать токены, аналогичные [node: author: name], где часть токена после node: author ссылается на токен пользователя. В отличие от модуля Token для Drupal 6, код, который в Drupal 7 обрабатывает токены, позволяет создавать динамические токены. Это связано с тем, что в Drupal 7 модули, реализующие токены, могут заменить любой токен, а не только те, которые они определили. Обычный цикл, используемый в hook_tokens (), следующий.

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

Используя следующий код, вы можете получить то, что пытаетесь достичь. Токены имеют определенный формат, который отличается от того, который вы описываете. Код не был проверен.

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

Замена токенов настолько специфична, что я не думаю, что вы найдете модуль, который это делает. Ваша единственная возможность - это пользовательский модуль, который вы пишете.

киамлалуно
источник