2016-10-06 75 views
0

在Drupal上構建的Intranet上工作,其中我有一個帶有幾個選項卡的模塊。根據用戶登錄,更改Drupal模塊中的選項卡名稱。

有兩種類型的用戶,管理員和非管理員。我喜歡根據誰在查看它來更改標籤的名稱。

目前,這是我得到:

function lessons_learned_menu(){ 
... 
    $items['lessons-learned/projects/viewAll'] = array(
    'title' => 'View All Projects - LL', 
    'description' => 'Review page that lists projects that are currently open.', 
    'page callback' => 'pmo_lessons_learned_projects_viewAll', 
    'access arguments' => array('Access pmo_lessons_learned'), 
    'type' => MENU_LOCAL_TASK 
); 
... 

訪問參數「訪問pmo_lessons_learned」,每個人都有(包括管理員)和「管理員pmo_lessons_learned」只有管理員擁有。

的東西,沒有工作:

if(!user_access("Administer pmo_lessons_learned")){  
    $items['lessons-learned/projects/viewAll'] = array(
    'title' => 'View All Projects - LL', 
    'description' => 'Review page that lists projects that are currently open.', 
    'page callback' => 'pmo_lessons_learned_projects_viewAll', 
    'access arguments' => array('Access pmo_lessons_learned'), 
    'type' => MENU_LOCAL_TASK 
    ); 
} 
else 
{ 
    $items['lessons-learned/projects/viewAll'] = array(
     'title' => 'Review Projects', 
     ... 
} 

當我試圖調試它,我總是得到用戶爲管理員(當它非管理員),因此每次去了別的條件。

所以我喜歡改變標籤的名稱,如果用戶不是管理員,反之亦然。

回答

1

hook_menu被調用一次來構建和緩存菜單項,並且不應該在清除緩存之前再次運行。該鉤子由Drupal用戶1(admin)調用,這解釋了爲什麼user_access("Administer pmo_lessons_learned")返回true

但是,您可以使用菜單項定義中的'title callback'配置來使用函數生成標題。

+0

工作正常!謝謝!還有一個問題:現在我想添加一個選項卡,如果用戶是非管理員,並且根本不顯示管理員的選項卡。任何想法如何做到這一點?或者有沒有辦法說不管理員,所以只有非管理員才能看到選項卡。在這裏添加一個不是? 'access arguments'=> array('Administrator pmo_lessons_learned'), – Vipresh

+0

爲此,您需要更改「type」配置,但不能爲類型使用回調,因此一種方法是添加一個菜單項有一個用於非管理員和一個用於管理員,那麼你將能夠設置特定的'title','access arguments'和'type'。要防止將管理項目呈現爲製表符,請將類型切換爲「MENU_CALLBACK」。此解決方案意味着具有不同的管理項目路徑。 您可能更願意通過hook_preprocess實現或模板/ css覆蓋從主題更改「菜單本地任務」項目的渲染。 – EricLavault