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

在Drupal中,如何更改传递给Pathauto的值?,drupal,token,pathauto,Drupal,Token,Pathauto,我已将Pathauto配置为基于节点标题为特定内容类型生成别名。问题是,我想在Pathauto使用此标题生成别名之前对此标题进行一些小更改 中的第一条评论建议使用hook_token_值,但我真的不明白如何使用它,即使在阅读了本文之后。在我的测试中,当我实现这个钩子时,生成的别名总是“array”,这意味着我遗漏了一些东西 有什么帮助吗?谢谢。您可能也没能实现挂钩令牌列表。提供新令牌需要两个步骤: 实施hook\u token\u list来声明您将要提供的令牌。这将只是标记的名称,以及简短的解

我已将Pathauto配置为基于节点标题为特定内容类型生成别名。问题是,我想在Pathauto使用此标题生成别名之前对此标题进行一些小更改

中的第一条评论建议使用hook_token_值,但我真的不明白如何使用它,即使在阅读了本文之后。在我的测试中,当我实现这个钩子时,生成的别名总是“array”,这意味着我遗漏了一些东西


有什么帮助吗?谢谢。

您可能也没能实现
挂钩令牌列表。提供新令牌需要两个步骤:

  • 实施
    hook\u token\u list
    来声明您将要提供的令牌。这将只是标记的名称,以及简短的解释,以及标记将应用于什么类型的对象的信息(例如节点、用户、分类法等)
  • 实现
    hook\u token\u 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
    为节点对象提供了一个标记,名为
    yourmoduletitle
    ,以及一个简短的描述。主要工作在另一个钩子中完成:

    /**
     * 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
    将是用户对象,对于其他类型,依此类推)。它所做的是创建一个值数组,由令牌名称键入,替换该令牌作为值。token_node.inc的原始代码只是通过
    check_plain()
    运行标题,因此这将是插入您自己逻辑的地方。

    在Drupal 7中,token功能已移动到core。令牌由和方法实现。对于使用示例,请按照提供的链接进行操作,并查找到实现hook_令牌和hook_令牌信息的函数的链接……我发现和函数有助于理解此钩子的工作方式


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

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