Passar parâmetros com tokens

10

É possível enviar parâmetros junto com tokens?

Eu tenho um módulo que define o mod1_info e mod1_tokens. Se eu inserir% token: mod1: test em uma página, ele será substituído por <a href='test.html'></a>.

O que eu realmente quero é inserir% token: mod1: test [variable] e get <a href='test.html'>variable</a>.

Isso é possível?

Nos bastidores, o test.html está sendo construído com alguns parâmetros dinâmicos, por isso é semelhante ao test.html? Param1 = foo & param2 = bar . O que eu preciso é uma maneira de alguém editando o site inserir um token em qualquer página e poder especificar o que aparece como link (uma imagem, algum texto ou ambos).

dorminhoco
fonte
1
Infelizmente, não acredito que isso seja possível. Por outro lado, não entendo bem o caso de uso, pois nunca precisei disso. Talvez se você expandir o que deseja, uma sugestão diferente pode ser sugerida.
Letharion

Respostas:

8

Usando o Drupal 7, os módulos podem manipular facilmente tokens semelhantes a [nó: autor: nome], onde a parte do token após o nó: autor está se referindo a um token de usuário. Diferentemente do módulo Token do Drupal 6, o código que no Drupal 7 manipula os tokens permite a criação de tokens dinâmicos. Isso ocorre porque no Drupal 7, os módulos que implementam tokens podem substituir qualquer token, não apenas os tokens que eles definiram. O loop normal usado em hook_tokens () é o seguinte.

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

Usando o código a seguir, você pode obter o que está tentando alcançar. Os tokens têm um formato específico, diferente do que você está descrevendo. O código não foi testado.

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

A substituição dos tokens é tão específica que acho que você não encontrará um módulo que faça isso. Sua única possibilidade é um módulo personalizado que você escreve.

kiamlaluno
fonte