使用自定义路径创建自定义节点选项卡
问题描述:
无论如何我可以自定义节点选项卡的路径吗?使用自定义路径创建自定义节点选项卡
当使用pathauto或hook_menu_alter时,我可以将节点视图的路径更改为node/node_id,几乎可以做任何事情,但让我们假设xyz/node_title。
节点的标签,但是,仍然留在路径/节点/ NODE_ID/TAB_NAME
我想自定义选项卡添加到节点,并保持自定义路径,以及(如:XYZ/node_title/tab_name而不是node/node_id/tab_name)。
我管理通过hook_menu添加自定义标签:
$items['node/%node/members'] = array(
'title' => 'Manage Membership',
'page callback' => 'mymodule_members',
'page arguments' => array(1),
'access callback' => 'mymembers_members_access',
'access arguments' => array(1),
'type' => MENU_LOCAL_TASK
);
但如果我尝试定制的道路,无论是在hook_menu或hook_menu_alter,标签就会消失。
任何想法?
PS,我在Drupal论坛上发布了the same question,到目前为止没有答案。我会交叉更新。
答
您可以在settings.php中添加两个函数:custom_url_rewrite_inbound()和custom_url_rewrite_outbound()。
这些页面中的示例应该明确如何使用它们。
function custom_url_rewrite_inbound(&$result, $path, $path_language) {
global $user;
// Change all article/x requests to node/x
if (preg_match('|^article(/.*)|', $path, $matches)) {
$result = 'node'. $matches[1];
}
// Redirect a path called 'e' to the user's profile edit page.
if ($path == 'e') {
$result = 'user/'. $user->uid .'/edit';
}
}
function custom_url_rewrite_outbound(&$path, &$options, $original_path) {
global $user;
// Change all 'node' to 'article'.
if (preg_match('|^node(/.*)|', $path, $matches)) {
$path = 'article'. $matches[1];
}
// Create a path called 'e' which lands the user on her profile edit page.
if ($path == 'user/'. $user->uid .'/edit') {
$path = 'e';
}
}
Drupal 7的使用两个新的钩子,而不是那些功能:hook_url_inbound_alter()和hook_url_outbound_alter()。
我结束了使用这个答案,与url_alter模块(这使我保持settings.php干净)。 subpath_alias模块与其他自定义代码进行了拼合。 – Omer 2010-06-20 12:47:38
@kiamlaluno,Drupal 7使用什么? – Michiel 2012-01-09 13:55:53
@Michiel我更新了我的答案来报告。 – kiamlaluno 2012-01-09 14:26:12