動態添加頁面到Zend_Navigation容器在運行時
在繼續我的最後一篇文章關於Zend_Navigation, 為sitemap.xml的請求路由到自定義控制器/動作 ,這篇文章是關於dymnamically添加頁面到Zend_Navigation容器在運行時/腳本的執行。
它的一切都很好在您的網頁指定INI或XML的文件,但在某些時候你將不得不改變在您的網站頁面,你要的一部分,一個菜單,網站地圖,或包含在您的麵包屑。 因此,我們需要做的就是添加網頁到我們 Zend_Navigation容器在運行時。 舉例這將是在增加新聞,博客,或網頁評論等
在這個例子中我將添加一些新聞職位,以我的靜態定義的INI配置。 為了讓我的新聞文章網頁的配置我用一個類,返回一個數組,格式如下:
$ pagesToAdd =陣列( 0 =>“ 陣列( '標籤'=>“假新聞故事#5 ...', '模塊'=>“www的, '路線'=>“www的索引', '行動'=>“'查看', '控制器'=>“新聞', '參數'=>“陣列( '身份證'=>“'5 -偽新聞故事 - 5') ), 1 =>“ 陣列(/ *更多詳情頁 * /) );
正如你會注意到,函數返回一個數組,其中包含陣列從而彌補了配置陣列 Zend_Navigation_Page_Mvc。 因此,在新的數組循環 Zend_Navigation頁面可以創建從配置陣列。 接下來的事情的一部分,是循環中的頁面添加正確的位置(或者頁面可以使用批量添加“ - > addPages()方法)。
要做到這一點,找到你的網頁要添加子頁面和簡單的添加網頁。 在這種情況下,我使用了下面的代碼找到我的網頁:
$容器> findOneBy('標籤','最新消息') - >“調用 AddPage($頁); 我的整體導航在引導初始化因此看起來像這樣:
/ ** *用於處理頂級導航 * * @返回Zend_Navigation * / 保護功能_initNavigation() { $這個 ->引導('佈局'); 這個佈局 = $ $ ->的getResource('佈局'); = $ $視圖佈局 -> getView(); 新Zend_Config_Ini配置= $( APPLICATION_PATH。 '/ configs / navigation.ini',APPLICATION_ENV); 新Zend_Navigation集裝箱 = $($配置->“默認); / /現在增加近25新聞報導 $新聞 =新的新聞(); 頁 = $ $新聞> getNavigationEntries(); 的foreach($頁頁美元){ 新Zend_Navigation_Page_Mvc頁 = $($頁); $容器> findOneBy('標籤','最新消息') - >“調用 AddPage($頁); } $視圖 ->“導航($容器); }
在東西需要被添加的某種形式的緩存(使用調用Zend_Cache大概;)),否則這將是相當昂貴,每個頁面加載。


















































這正是我所期待的 - 感謝您一個真正的明顯例子。 乾杯。 Ğ
好貼! 我已經有些麻煩發起一個模型類中的引導。 任何線索為何申請 /模型類不能從引導? 你的類是所謂的'新的新聞()',而不是我想添加導航頁面通過獲取一個導航樹從一個模型類。 如果你有一個想法,請讓我知道! ;)
我的模型是編輯的職位,其正確名稱代碼 Pro_News並回升,由自動加載。
猜你不是使用模塊? 但如果這樣你的模型應該被稱為 _新聞的採埃孚拿起默認情況下(我不使用這個系統我自己)。
我建議你檢查包括路徑從你的bootstrap方法,看它是否包含“應用程序/模式”或包含文件手動。
嗯,我使用的模塊,我的壞。 但是,你應該建議自動裝填工作? 嗯,我把它挖一個深一點。 目前,我使用的函數,在調用 AddPage BaseControllers,這是不是真的表現友善的...呵呵。 感謝您的回复。
確保你的模塊模型是正確命名 _新聞(例如),它應該拿起使用自動加載。