我将Pathauto配置为根据节点的标题为特定的内容类型生成别名。问题是,在Pathauto使用它生成别名之前,我想对这个标题做一些小的更改。
this post中的第一个注释建议使用hook_token_values,但我不能真正理解如何使用它,即使在阅读了docs之后也是如此。在我的测试中,当我实现这个钩子时,生成的别名总是"array",这意味着我遗漏了一些东西。
有什么帮助吗?谢谢。
发布于 2010-05-11 03:20:37
您可能也错过了实现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;
}
}这就是说,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;
}每当需要节点对象的令牌时,都会调用该方法,并将相关节点作为$object参数传递(对于用户令牌,$type将是' user ',$object将是user对象,对于其他类型依此类推)。它所做的是创建一个值数组,以令牌名称为关键字,并将该令牌的替换项作为值。来自token_node.inc的原始代码只是通过check_plain()运行标题,所以这里应该插入您自己的逻辑。
发布于 2012-04-07 23:16:59
在Drupal7中,令牌功能已移至核心。令牌由hook_tokens和hook_token_info方法实现。有关用法示例,请按照提供的链接进行操作,并查找实现hook_tokens和hook_token_info…的函数的链接我发现statistics_tokens和statistics_token_info函数对理解这个钩子的工作原理很有帮助。
可能还值得注意的是,此挂接需要由模块…实现我第一次尝试将测试函数放入主题的template.php中,结果什么也没有发生:-p
https://stackoverflow.com/questions/2804781
复制相似问题