2010-02-01 153 views
1

我需要創建一個菜單項,如果用戶有一定的條件,它會改變它的標題和鏈接。 Drupal緩存所有的菜單,所以我不能真的想辦法做到這一點。Drupal 6動態菜單項

例如,用戶有一個連接到他的配置文件的節點,菜單項是「Create blabla」(鏈接節點/ add/blabla) 用戶沒有節點,菜單項是「Create notblablabla」/add/notblabla)

回答

0
  • 一個簡單的方法來做到這一點,將使用JavaScript。您可以使用jQuery毫不費力地修改HTML。這將要求你的用戶啓用JS,所以它不是一個完美的解決方案。

  • 另一種選擇是將一個菜單項鍊接到您在模塊中創建的URL。他可以執行條件檢查,將用戶重定向到他應該重定向到的任何網址。這種方法唯一的問題是改變菜單項的標題。但是你可能能夠爲兩種情況給出一個合適的描述。您也可以使用JS來更改鏈接的名稱。這樣你就可以在沒有JS的情況下保持功能完好,但可以在啓用它的情況下改進用戶界面。

1

Drupal不允許使用動態菜單項,但如果用戶不被允許去那裏,它可以隱藏某些菜單項。參考你的例子,如果你創建了這兩個鏈接並使用權限系統來限制這些節點類型的創建爲特定的角色,那麼Drupal將只顯示菜單項,如果用戶具有所需的角色。也許這有助於你的情況。

其他選項是:

  • 寫一個簡單的模塊,它顯示了一個鏈接,所有用戶和重定向到點擊時
  • 創建一個顯示基於當前的正確鏈接的自定義模塊的相應頁面用戶(確保該塊沒有被緩存)
  • 採用javascript像googletorp建議(雖然我不會推薦它,因爲他提到的原因)
+0

由於這是一個需要滿足的條件,權限可能無濟於事。 創建塊會從菜單系統中刪除鏈接,所以它不再是菜單項。 – googletorp

+0

確實,塊中的鏈接不是菜單項,但在某些情況下,這不是問題,所以我仍然希望將其作爲選項提及。 – marcvangend

0

由於該菜單項似乎對用戶個人資料信息爲前提,我會建議編寫一個簡單的模塊,實現hook_menu_alter()根據您的條件改變菜單。然後,您可以在hook_user()內撥打menu_cache_clear(),以在用戶配置文件更改時更新菜單緩存。

0

您是否嘗試過這個(插入你的其他條件爲「如果」聲明以及課程):


function hook_translated_menu_link_alter(&$item, $map) { 
    if ($item['href'] == 'node/add/blabla') { 
    $item['href'] = 'node/add/notblabla'; 
    } 
} 

你可能也必須這樣做標記的聯繫,可變:


function hook_menu_link_alter(&$item, $menu) { 
    if ($item['link_path'] == 'node/add/blabla') { 
    $item['options']['alter'] = TRUE; 
    } 
}