我让Pathauto配置为根据节点的标题为特定内容类型生成别名。问题是我想在Pathauto使用它来生成别名之前对此标题进行小的更改。
this post中的第一条评论建议使用hook_token_values,但即使在阅读docs后我也无法理解如何使用它。在我的测试中,当我实现这个钩子时,生成的别名总是“数组”,这意味着我遗漏了一些东西。
有任何帮助吗?感谢。
答案 0 :(得分:5)
您可能也错过了实施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
将是'用户',并且$object
将是用户对象,依此类推其他类型)。它的作用是创建一个由标记名称键入的值数组,并将该标记替换为值。来自token_node.inc的原始代码只通过check_plain()
运行标题,因此这将是插入您自己的逻辑的地方。
答案 1 :(得分:1)
在Drupal 7中,令牌功能已移至核心。令牌由hook_tokens和hook_token_info方法实现。有关用法示例,请按照提供的链接,查找实现hook_tokens和hook_token_info的函数的链接...我发现statistics_tokens和statistics_token_info函数有助于理解此挂钩的工作原理。
可能还值得注意的是,这个钩子需要由一个模块实现......我的第一次尝试是将我的测试函数放到主题的template.php中,只是没有任何事情发生:-p