2009-11-23 38 views
1

不活動的任務標籤有什麼辦法,以顯示本地任務的用戶,如果他們不具備必要的權限?現在看來,Drupal只是將它們排除在頁面代碼之外。我想向他們展示,但使用不同的CSS類。如何顯示在Drupal

的Drupal的版本是5.20

回答

4

即使有相關的Drupal 5和6之間的本地任務的建築一定的差異,Mac是正確的邏輯忽略條目不被當前用戶訪問是相當深深嵌入menu.inc功能。如果你想尋找自己,從theme_menu_local_tasks()開始,並從那裏進行功能調用。

如果我不得不實現你要找的功能,我寧願避免亂搞直接菜單訪問設置了Mac建議。相反,我會用定製版本覆蓋theme_menu_local_tasks(),並在那裏複製條目檢索邏輯。第一次運行會像以前一樣獲取主要和次要鏈接,第二次將執行相同的操作,而impersonating another user(在這種情況下可能是用戶1)。這樣,我會得到兩個版本的本地任務標記,然後我需要以某種方式進行區分以找到當前用戶不允許的標記,因此需要額外的CSS類。

請注意,這樣做仍然有點難看,因爲menu_primary_local_tasks()menu_secondary_local_tasks()已經返回主題列表,所以比較需要在標記上工作,可能會以某種方式解析li標籤。因此,花費一些時間嘗試做同樣的事情(獲取兩個不同用戶的本地任務)可能是值得的,但在主題化之前使用較低級別的函數獲取條目。

注意:如果你最終使用user impersonation logic,請務必使用模擬過程中禁用會話儲蓄的安全,第二個版本。

+0

謝謝,就這麼做。有效。用戶模仿不是必需的,但是感謝鏈接。 – 2009-11-24 11:53:27

+1

我也喜歡這種方法。我看到的比我之前提出的最大的優點是,這個比例更好:因爲標記是由某種「差異」函數生成的,而不是通過文本內容選擇菜單項,所以應用此解決方案會更快如果你需要調整的菜單數量增加。它也不依賴於js/jQuery(雖然幾乎每個瀏覽器都支持它),這對於您的頁面能夠正確顯示更「依賴」。 – mac 2009-11-24 15:31:36

3

我知道D6版hook_menu比D5的要好得多。但是 - 您無法覆蓋該行爲,因爲它在menu.inc中進行了硬編碼。

如果我有什麼上面,一個解決辦法(相當不雅,我必須承認)右可能是:

  1. 取下菜單項的訪問控制,讓所有的菜單項都可見所有用戶。在回調
  2. 認沽訪問控制直接(你會做的標籤不可點擊的瞬間,但如果用戶直接將URL,這將阻止訪問,他們必須看不到頁)。
  3. 在顯示選項卡的頁面中,根據用戶具有的角色加載不同的js文件。具有有限訪問權的用戶的js文件將通過文本內容的方式選擇標籤(至少在D6標籤中不會獲得任何「個人」類:它們只會獲得一個共同的「標籤」),它將刪除指向製表符用戶沒有訪問權限,它會將自定義類添加到應以不同方式顯示的那些製表符。
  4. 爲您的自定義類添加CSS主題。

如前所述,我不太瞭解D5,所以它可能也會證明你可以用更簡潔的方式實現你想要的東西!

+2

+1 - 我會用另一種方法(如在一個單獨的答案提出的),只是爲了防止需要添加訪問檢查所有受影響的菜單回調,這將是繁瑣的維護。但是這個版本是一個有效的選擇,並且可以更容易/更適合於具有較少通用調整需求的情況。 – 2009-11-24 15:36:43