Pasar parámetros con tokens

10

¿Es posible enviar parámetros junto con tokens?

Tengo un módulo que define mod1_info y mod1_tokens. Si ingreso% token: mod1: prueba en una página, se reemplaza con <a href='test.html'></a>.

Lo que realmente quiero es ingresar% token: mod1: prueba [variable] y obtener <a href='test.html'>variable</a>.

es posible?

Detrás de escena, test.html se está construyendo con algunos parámetros dinámicos, por lo que en realidad se parece a test.html? Param1 = foo & param2 = bar . Lo que necesito es una forma para que alguien que edita el sitio inserte un token en cualquier página y pueda especificar lo que aparece como el enlace (una imagen, algún texto o ambos).

durmiente
fuente
1
Lamentablemente, no creo que esto sea posible. Por otro lado, no entiendo bien el caso de uso, ya que nunca he necesitado esto. Quizás si expande lo que desea, se puede sugerir una sugerencia diferente.
Letharion

Respuestas:

8

Usando Drupal 7, los módulos pueden manejar fácilmente tokens similares a [node: author: name], donde la parte del token después de node: author se refiere a un token de usuario. A diferencia del módulo Token para Drupal 6, el código que en Drupal 7 maneja los tokens permite la creación de tokens dinámicos. Esto se debe a que en Drupal 7, los módulos que implementan tokens pueden reemplazar cualquier token, no solo los tokens que definieron. El bucle normal utilizado en hook_tokens () es el siguiente.

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

Usando el siguiente código, puede obtener lo que está tratando de lograr. Sin embargo, los tokens tienen un formato específico, que es diferente del que estás describiendo. El código no ha sido probado.

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

El reemplazo de los tokens es tan específico que no creo que encuentres un módulo que lo haga. Su única posibilidad es un módulo personalizado que escriba.

kiamlaluno
fuente