4

我已将 Pathauto 配置为根据节点标题为特定内容类型生成别名。问题是我想在 Pathauto 使用它生成别名之前对这个标题进行一些小改动。

这篇文章中的第一条评论建议使用 hook_token_values,但我无法真正理解如何使用它,即使在阅读了文档之后。在我的测试中,当我实现这个钩子时,生成的别名总是“数组”,这意味着我遗漏了一些东西。

有什么帮助吗?谢谢。

4

2 回答 2

5

也可能是您错过了实施hook_token_list。提供新令牌是一个两步过程:

  1. 实施hook_token_list以声明您将提供的令牌。这将只是令牌的名称,以及简短的解释,以及令牌将适用的对象类型的信息(例如节点、用户、分类......)
  2. 实施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(),所以这将是插入您自己的逻辑的地方。

于 2010-05-10T19:20:37.137 回答
1

In Drupal 7, the token functionality has been moved to core. Tokens are implemented by the hook_tokens and hook_token_info methods. For usage examples, follow the links provided, and look for links to functions that implement hook_tokens and hook_token_info… I found the statistics_tokens and statistics_token_info functions helpful in understanding how this hook works.

It's probably also worth noting that this hook needs to be implemented by a module… my first attempt I dropped my test functions into the theme's template.php, only to have nothing happen at all :-p

于 2012-04-07T15:16:59.263 回答