另一天與Joomla玩耍,而另一個缺點修復:)創建管理菜單項動態地的Joomla
這一次進來的管理(後端)菜單的形式。 要將項目/分項添加到這個菜單,人必須寫在一個XML文件中的菜單項,伴隨他們的組件/擴展/插件/不管。 安裝擴展程序後,joomla「生成」菜單項並將它們「存儲」在數據庫中。 實際上,通過讀取數據庫來呈現真實/有形菜單。
這有幾方面的含義:
- 菜單是不編寫腳本
- 菜單不是動態的;改變XML文件安裝後,將不會更新菜單
- 項目的去除是不編寫腳本; joomla負責在您卸載擴展程序時刪除任何項目。
我有這個系統,它依賴於動態修改菜單項,但通過代碼的能力。 簡單地說,我需要的功能,我可以創造一個揮發性菜單項(即,它在會話結束時被刪除)。
要做到這一點,我有一對夫婦的準黑客:
- 覆蓋了全球的Joomla數據庫實例,這樣我可以把它返回假的菜單項。是根據我的需要輸出搞砸之前
JFactory::$database=new MyFakeJDatabase(JFactory::$database);
- 攔截菜單代碼(HTML):因爲數據庫對象存儲在JFactory類的公共屬性這是可能的。這不是模板友好的,因爲最終的結果是注入html,這可能不是模板的設計目的。
- 通過JavaScript創建菜單項。這與模板和切換子菜單的JavaScript有關。
- 創建數據庫菜單項,每當我需要他們,不知何故「標籤」我的項目,使我下一次(或會話結束)刪除它們。這聽起來像是一種魅力。由於我可以緩衝菜單項,我可以在一個完整的SQL語句中創建我的菜單項。比我可以使用另一個SQL刪除標記的菜單項。 2個SQL語句在服務器上的負載可能不是很大。
您怎麼看?
編輯:我檢查joomla/administrator/modules/mod_menu/helper.php
,看看我能找到一種方法來注入我的東西,希望,也許使用的Joomla的全局變量或東西,但沒有使用 - 菜單項通過讀取直接創建數據庫和渲染以及。 僅供參考我在谷歌上搜索了一段時間,沒用。
#4似乎是最容易維護和更改,如果有必要。例如,如果需要在具有特定訪問級別的用戶位於特定管理頁面上時添加菜單項,則可以向組件控制器添加一些代碼以檢查訪問級別和當前頁面,然後調用SQL在模型中添加項目到數據庫中的語句。 – EmmyS 2011-01-20 16:26:22