更改所有网址以包括其他信息


8

哪些钩子可用于更改URL?例如,有些语言模块在启用后会提供诸如的网址,/en/node/1而不是将其保留为/node/1

我希望在url中有类似的内容,我可以访问它而不会损害其他功能。

这是如何完成的?

Answers:


4

因此,您正在寻找一种修改链接URL的方法吗?我最近对此进行了调查,并对需要多少狩猎感到惊讶。

我使用了hook_url_outbound_alter( &$path, &$options, $original_path ),它允许您更改Drupal URL系统正在编写的链接URL。

还有hook_url_inbound_alter( &$path, $original_path, $path_language ),可能会更好,因为它包括路径的特定语言-这取决于您要在哪里进行更改。我个人觉得hook_url_outbound_alter()可靠且简单-使用它可以更改所有适当的URL,并且可以使用$ options可靠地添加和编辑查询字符串(...?query = string&foo = bar)和哈希值(... #someId)。

修改$ path,它将更新写入URL href中的实际路径。当然,这会在所有链接上运行,因此您首先要检查它是否是要修改的链接。

它是在别名之前执行的,因此它将基于Drupal的默认值。如果仅想修改分类法路径,请举两个非常简单的示例:

function some_module_url_outbound_alter( &$path, &$options, $original_path ) {
  if(strpos($original_path, 'taxonomy/term') === 0) {
    // do stuff
  }
}

和/或如果只希望它在特定页面上运行,例如节点编辑页面:

function some_module_url_outbound_alter( &$path, &$options, $original_path ) {
  $current_path = explode("/", current_path() );
  if (count($current_path) >= 3 && $current_path[0] == "node" && $current_path[2] == "edit") {
    // do stuff
  }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.