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

时间:2010-06-19 13:05:57

标签: drupal drupal-6 menu

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

当使用pathauto或hook_menu_alter时,我可以将节点视图的路径从node / node_id更改为几乎任何东西,但是让我们说xyz / node_title。

但是,节点选项卡仍保留在路径/ node / 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,到目前为止还没有答案。我会交叉更新。

2 个答案:

答案 0 :(得分:2)

我认为此模块将帮助您按照自己的方式构建标签路径:Sub-path URL Aliases

答案 1 :(得分:2)

您可以在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()