2011-03-01 37 views
1

我一直在尋找一個高點來做到這一點。我想以編程方式創建一個正常的菜單項,鏈接到它的父項。類似於默認菜單任務的概念,但只是一個正常的菜單項。有沒有人曾經這樣做過?創建一個鏈接到它的父項的菜單項

我想要一些我可以用一個drupal鉤子做的事情。

回答

0

您只需要創建一個新的菜單項,它具有相同的路徑作爲其父項。

+0

你是指用這個UI?我想要以編程方式執行此操作。 – lordg 2011-03-01 22:30:22

+0

是的,這是通過用戶界面的意思。 Drupal API無法定義父子菜單關係,除此之外,他們的路徑。所以我不知道乾淨而簡單的方式來編程。 – berkes 2011-03-02 10:25:00

0
$items['parent'] = array(
    'title' => 'I am parent', 
    'page callback' => 'drupal_get_form', 
    'page arguments' => 'get_parent', 
    'access arguments' => array('access parent'), 
    'type'  => MENU_NORMAL_ITEM, 
); 

$items['parent/child'] = array(
    'title' => 'I am child link of parent', 
    'page callback' => 'drupal_get_form', 
    'page arguments' => 'get_children_for_thisparent', 
    'access arguments' => array('access children of parent'), 
    'type'  => MENU_NORMAL_ITEM, 
); 

這應該做的伎倆:)

+0

@ gokul-n-k我不確定我是否明白你在暗示什麼。你只需使用hook_menu完成一個正常的菜單結構,並且我還沒有找到任何drupal函數或屬性,它告訴drupal菜單,子項路徑與其父路徑相同。我試圖實現與默認菜單任務完全相同的默認菜單項。 – lordg 2011-03-02 19:34:15

0

假設你想放置在主菜單下,

$item['form_example'] = array(
     'title' => 'Example menu', 
     'description' => 'This is an example menu item', 
     'type' => MENU_NORMAL_ITEM, 
     'page callback' => 'custom_function', 
     'menu_name' => 'main-menu', 
    ); 

    return $item; 

你會再拿到主菜單(清除緩存)下的菜單項。訣竅是添加一個關鍵'menu_name'。

要獲取menu_name,請打開菜單管理頁面,然後單擊任何根菜單上的「編輯菜單」。 URL將會像'SITE_URL/admin/structure/menu/manage/main-menu/edit'。查看最後一個URL段(這裏是主菜單)。

對於第二種情況,您可能希望將其置於主菜單的主頁下。代碼是。

$item['form_example'] = array(
    'title' => 'Example menu', 
    'description' => 'This is an example menu item', 
    'type' => MENU_NORMAL_ITEM, 
    'page callback' => 'custom_function', 
    'menu_name' => 'main-menu', 
    'plid' => 218, 
); 

return $item; 

在這裏,我添加了一個關鍵PLID到關聯數組,它是菜單項(「家」在這裏)爲這將是一個孩子的MLID。對於這種情況,它將是主菜單的子項。

要獲得mlid,您必須按照上述步驟進行操作,轉到菜單管理頁面並單擊列表鏈接,然後單擊菜單項上的編輯,例如, SITE_URL/admin/structure/menu/item/218/edit,這樣你就可以得到mlid,從而完成它。

注意。如果您從後端更改此菜單層次結構或其他設置,您將始終具有重置選項來重置它,並且在重置之後它的行爲將與代碼中所述相同。