2010-05-20 50 views
3

我想在模塊的「node /%/ edit」頁面中添加一些名爲「cssswitch」的選項卡。 當我點擊「重建菜單」時,會顯示兩個新選項卡,但它們在編輯時顯示在所有節點上,而不僅僅顯示節點「cssswitch」。我只希望在編輯「cssswitch」類型的節點時顯示這些新選項卡。drupal hook_menu_alter()用於添加製表符

另一個問題是當我清除所有緩存時,標籤完全從所有編輯頁面中消失。以下是我寫的代碼。

function cssswitch_menu_alter(&$items) { 

     $node = menu_get_object(); 
     //print_r($node); 
     //echo $node->type; //exit(); 
     if ($node->type == 'cssswitch') { 

      $items['node/%/edit/schedulenew'] = array(
       'title' => 'Schedule1', 
       'access callback'=>'user_access', 
       'access arguments'=>array('view cssswitch'), 
       'page callback' => 'cssswitch_schedule', 
       'page arguments' => array(1), 
       'type' => MENU_LOCAL_TASK, 
       'weight'=>4, 
      ); 

      $items['node/%/edit/schedulenew2'] = array(
       'title' => 'Schedule2', 
       'access callback'=>'user_access', 
       'access arguments'=>array('view cssswitch'), 
       'page callback' => 'cssswitch_test2', 
       'page arguments' => array(1), 
       'type' => MENU_LOCAL_TASK, 
       'weight'=>3, 
      ); 


     } 

    } 

function cssswitch_test(){ 
    return 'test'; 
} 

function cssswitch_test2(){ 
    return 'test2'; 
} 

感謝您的任何幫助。

回答

8

hook_menu_alter()僅在菜單構建過程中調用,因此您無法在該函數中執行動態節點類型檢查。

不過,要達到你想要什麼,你可以用自定義訪問回調做法如下:

 // Note, I replaced the '%' in your original code with '%node'. See hook_menu() for details on this. 
     $items['node/%node/edit/schedulenew2'] = array(
      ... 
      'access callback'=>'cssswitch_schedulenew_access', 
      // This passes in the $node object as the argument. 
      'access arguments'=>array(1), 
      ... 
     ); 

然後,在新的自定義訪問回調:

function cssswitch_schedulenew_access($node) { 
    // Check that node is the proper type, and that the user has the proper permission. 
    return $node->type == 'cssswitch' && user_access('view cssswitch'); 
} 

對於其他節點類型,此函數將返回false,從而拒絕訪問,從而刪除選項卡。

+6

+1 - 只需一個附加說明:'hook_menu_alter()'應該用於改變其他模塊提供的菜單條目。由於OP想添加新的條目,他應該使用'hook_menu()'來代替。 – 2010-05-20 20:12:47

+1

謝謝,這正是我所期待的。我明白現在它是如何工作的。 – EricP 2010-05-20 20:29:41