Drupal Token用法示例

时间:2010-02-15 08:54:29

标签: php drupal token

我需要使用某种占位符在另一个节点中包含节点内容,例如:[node-5663]将被转换为node-id匹配5663的节点内容(正文)。

上面的例子只是一个例子,我需要的是这样的事情:[table-TABLE-ID]其中TABLE-ID将是我在节点中定义的字段(使用CCK)。

搜索和匹配我需要获取的内容时没有任何问题,但我缺少的是如何使用令牌。

欢迎任何帮助:)

2 个答案:

答案 0 :(得分:4)

虽然我对你想要的具体细节有点模糊,但基本前提实际上非常简单。

您需要构建一个自定义模块,它只是定义一些标记,类似于以下内容:

/**
 * Implements hook_theme().
 */
function my_module_theme() {
  return array(
    'my_module' => array(
      'arguments' => array('object' => NULL)
    ),
  );
}

/**
 * Implements hook_token_list().
 */
function my_module_token_list($type = 'all') {
  if ($type == 'node' || $type == 'all') {
    $tokens = array();
    $tokens['my_module']['table-TABLE-ID'] = t('description').
    return $tokens;
  }
}

/**
 * Implements hook_token_values().
 */
function my_module_token_values($type, $object = NULL) {
  if ($type == 'node') {
    ($table, $id) = explode('-', $object->my_field['value']);
    $tokens['table-' . $object->my_field['value']] = theme('my_module', db_fetch_object(db_query("SELECT * FROM {" . $table . "} WHERE id = %d", $id)));
    return $tokens;
  }
}

function theme_my_module($object) {
  return '<div>' . $object->content . '</div>';
}

注意:所有这些代码都是理论上的,我几乎可以说它不起作用。以我在这里完成它的方式执行db_query也是非常不安全的(这是我对你想要的解释),而是你应该为你想要的每种不同类型的查询都有一个标记('table-node-ID',等)。

希望这有点帮助。

答案 1 :(得分:1)

如果你需要从php中的另一个模块访问令牌,快速的方法是使用drupal函数“token_replace($ text)”

您传递可能包含令牌的文本,它将返回替换了令牌的文本。

Drupal 7的例子

<?php
$tokentext = "I'm the ga_tokenizer:ga-term [ga_tokenizer:ga-term]";
$processedText = token_replace($tokentext);
print $processedText;
?>

这将输出 我是ga_tokenizer:ga-term搜索用于查找页面的期限

如果您只想要实际的令牌值,请使用

<?php
$tokentext = "[ga_tokenizer:ga-term]";
$processedText = token_replace($tokentext);
?>