Передайте параметри за допомогою лексем


10

Чи можливо надсилати параметри разом з лексемами?

У мене є модуль, який визначає mod1_info та mod1_tokens. Якщо я введіть% token: mod1: test на сторінці, він замінюється на <a href='test.html'></a>.

Я хочу насправді ввести% token: mod1: test [змінна] та отримати <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 модулі, що реалізують маркери, можуть замінити будь-який маркер, а не лише лексеми, які вони визначили. Нормальний цикл, який використовується у mock_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;
}

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.