在Drupal中,如何更改传递给Pathauto的值?

Vin*_*nto 4 drupal token pathauto

我将Pathauto配置为根据节点的标题为特定内容类型生成别名.问题是我想在Pathauto使用它来生成别名之前对此标题进行小的更改.

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

有帮助吗?谢谢.

Hen*_*pel 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;
  }
}
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(),因此这将是插入您自己的逻辑的地方.