【问题标题】:In Drupal, how to change the values passed to Pathauto?在 Drupal 中,如何更改传递给 Pathauto 的值?
【发布时间】:2011-02-17 18:53:11
【问题描述】:

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

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

有什么帮助吗?谢谢。

【问题讨论】:

  • 您能否更具体地说明您不了解的内容(也许将您的测试代码作为示例发布)?

标签: drupal token pathauto


【解决方案1】:

您也可能错过了实现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() 运行标题,所以这将是插入您自己的逻辑的地方。

【讨论】:

    【解决方案2】:

    在 Drupal 7 中,令牌功能已移至核心。令牌由hook_tokenshook_token_info 方法实现。有关使用示例,请点击提供的链接,并查找实现 hook_tokens 和 hook_token_info 的函数的链接……我发现 statistics_tokensstatistics_token_info 函数有助于理解这个钩子是如何工作的。

    可能还值得注意的是,这个钩子需要由模块实现……我第一次尝试将测试函数放入主题的 template.php 中,结果什么也没发生:-p

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多