也许你错过了实施hook_token_list.提供新令牌是一个两步过程:
hook_token_list声明您要提供的令牌.这将只是令牌的名称,以及简短的解释,以及令牌将应用于哪种类型的对象的信息(例如节点,用户,分类法......)hook_token_value实际生成令牌的内容.当用他们应该代表的内容替换令牌时,将调用此方法.由于您只想提供令牌模块已经提供的标题令牌的替代版本,因此最好只复制token_node.inc中的相关部分,将其拆分为相关案例并调整为在另一个模块中使用:
/**
* Implementation of hook_token_list().
*/
function yourModule_token_list($type = 'all') {
if ($type == 'node' || $type == 'all') {
$tokens['node']['yourModule-title'] = t('Node title (customized version by yourModule)');
return $tokens;
}
}
Run Code Online (Sandbox Code Playgroud)
这简单地说它yourModule为节点对象提供了一个令牌,名称yourModule-title和简短描述.主要工作在另一个钩子中完成:
/**
* Implementation of hook_token_values().
*/
function yourModule_token_values($type, $object = NULL, $options = array()) {
$values = array();
switch ($type) {
case 'node':
$node = $object;
// TODO: Replace the check_plain() call with your own token value creation logic!
$values['yourModule-title'] = check_plain($node->title);
break;
}
return $values;
}
Run Code Online (Sandbox Code Playgroud)
只要需要节点对象的标记,就会调用此方法,并将相关节点作为$object参数传递(对于用户标记,$type将是'user',并且$object将是用户对象,对其他类型也是如此) .它的作用是创建一个由标记名称键入的值数组,并将该标记替换为值.来自token_node.inc的原始代码只运行标题check_plain(),因此这将是插入您自己的逻辑的地方.