使用自定义路径创建自定义节点选项卡

使用自定义路径创建自定义节点选项卡

问题描述:

无论如何我可以自定义节点选项卡的路径吗?使用自定义路径创建自定义节点选项卡

当使用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()

+0

我结束了使用这个答案,与url_alter模块(这使我保持settings.php干净)。 subpath_alias模块与其他自定义代码进行了拼合。 – Omer 2010-06-20 12:47:38

+0

@kiamlaluno,Drupal 7使用什么? – Michiel 2012-01-09 13:55:53

+0

@Michiel我更新了我的答案来报告。 – kiamlaluno 2012-01-09 14:26:12

我觉得这个模块会帮你按照你想要的方式组成标签路径:Sub-path URL Aliases