hook_url_outbound_alter()
我正在努力寻找有关如何使用此挂钩的任何文档或解释。我有一个页面:node/1221
,当它看起来像这样:node/1221/profile/chn/3
它为该用户加载一个配置文件。
我想要漂亮的网址,以便当用户访问departments/pch/chn/profile/3
时我希望它实际加载node/1221/profile/chn/3
我很确定钩子可以帮助我,但不知道它是如何工作的。
注意:使用drupal 6,尝试过别名,但它们不起作用。
第二次更新:
URL中的3
是我想要传递到另一个URL的配置文件ID。我node/1221/profile/chn/3
正在工作,因为它有一个抓取%4
参数的面板并将其传递给面板内的视图。希望这能提供更多背景。
目前正在尝试:
/**
* Implementation of hook_boot()
*/
function pathargs_boot() {
// remain empty, only needed to let Drupal bootstrap system know to load this module earlier.
}
/**
* Will define custom_url_rewrite_inbound(). If url_alter is enabled
* Pathargs inbound alter will be called by its implementation of
* custom_url_rewrite_inbound() instead.
*/
if (!function_exists('custom_url_rewrite_inbound')) {
function custom_url_rewrite_inbound(&$result, $path, $path_language) {
return pathargs_url_inbound_alter($result, $path, $path_language);
}
}
/**
* Implementation of hook_url_inbound_alter()
*/
function pathargs_url_inbound_alter(&$result, $path, $path_language) {
watchdog('Path Arguments', "$path + $original_path");
if($result == 'chn') {
$result = 'node/1222/chn/profile/3';
}
}
仍然没有工作......访问www.domain.com/chn什么也没做。
答案 0 :(得分:0)
如果你想使用 hook_url_outbound_alter()
,你需要升级到Drupal 7,因为它在D6及更早版本中不存在。
如果我是你,我会使用别名。别名通过重写url来工作departments/pch/chn/profile/3
将被翻译成node/1221/profile/chn/3
,这将是您安装的有效Drupal路径。
问题是你得到的是一些特定于站点的,所以你需要创建自己的系统来在自定义模块中创建别名,而不是依赖路径自动。
我不知道你的网址的语义,所以我无法帮助你如何创建别名。最有可能的是,您可以在创建新节点时执行此操作。看看pathauto_create_alias
,它应该可以帮助你完成大部分工作。
使用别名应该更易于维护,并且一些模块可以使用它来执行其他操作。使用custom_url_rewrite_xxx
很快就会很快变得混乱,特别是如果你需要添加很多规则。它现在可能会更快使用,但是如果你必须维护这个网站,这可能会导致一些严重的WTF从现在开始。
如果您决定采用此路线,则需要更改$path
变量,而不是$result
。您可以查看url_alter.api.php获取指导,使用示例如下:
function hook_url_inbound_alter(&$result, $path, $path_language) {
global $user;
// Change all requests for 'article/x' to 'node/x'.
if (preg_match('|^article(/.*)|', $path, $matches)) {
$path = 'node'. $matches[1];
}
// Change all requests to 'e' to the user's profile edit page.
if ($path == 'e') {
$path = 'user/'. $user->uid .'/edit';
}
}
答案 1 :(得分:0)
试试这个:http://drupal.org/project/subpath_alias根据该模块的描述,它可以做你想做的事。