通过令牌传递参数


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
不幸的是,我认为这是不可能的。另一方面,我不太了解用例,因为我自己从来不需要它。也许如果您扩展所需的内容,则可以提出不同的建议。
Letharion

Answers:


8

使用Drupal 7,模块可以轻松地处理类似于[node:author:name]的令牌,其中,node:author之后的令牌部分是指用户令牌。与Drupal 6的Token模块不同,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;
}

令牌的替换是如此具体,以至于我认为您找不到能够做到这一点的模块。唯一的可能是编写的自定义模块。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.