Przekaż parametry za pomocą tokenów

10

Czy możliwe jest przesłanie parametrów wraz z tokenami?

Mam moduł, który definiuje mod1_info i mod1_tokens. Jeśli wprowadzę% token: mod1: test na stronie, zostanie on zastąpiony przez <a href='test.html'></a>.

Tak naprawdę chcę wprowadzić% token: mod1: test [zmienna] i uzyskać <a href='test.html'>variable</a>.

czy to możliwe?

Za kulisami budowany jest test.html z kilkoma parametrami dynamicznymi, więc w rzeczywistości wygląda podobnie do test.html? Param1 = foo & param2 = bar . Potrzebuję sposobu, aby ktoś edytujący witrynę wstawił token na dowolnej stronie i był w stanie określić, co ma wyglądać jako link (obraz, jakiś tekst lub jedno i drugie).

podkład
źródło
1
Niestety nie wierzę, że jest to możliwe. Z drugiej strony nie do końca rozumiem przypadek użycia, ponieważ sam nigdy tego nie potrzebowałem. Być może, jeśli rozwiniesz to, czego chcesz, możesz zasugerować inną sugestię.
Letharion

Odpowiedzi:

8

Korzystając z Drupal 7, moduły mogą łatwo obsługiwać tokeny podobne do [node: autor: nazwa], gdzie część tokena za węzłem: autor odnosi się do tokena użytkownika. W odróżnieniu od modułu Token dla Drupala 6, kod, który w Drupal 7 obsługuje tokeny, umożliwia tworzenie dynamicznych tokenów. Jest tak, ponieważ w Drupal 7 moduły implementujące tokeny mogą zastąpić dowolny token, a nie tylko tokeny, które zdefiniowały. Normalna pętla używana w hook_tokens () jest następująca.

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

Korzystając z następującego kodu, możesz uzyskać to, co próbujesz osiągnąć. Tokeny mają jednak określony format, który różni się od opisywanego. Kod nie został przetestowany.

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

Zastąpienie tokenów jest tak specyficzne, że nie sądzę, że znajdziesz moduł, który to robi. Twoja jedyna możliwość to własny moduł, który piszesz.

kiamlaluno
źródło