動態添加頁面到Zend_Navigation容器在運行時

史蒂芬勞埃德沃特金斯 ,星期四2010年1月7日下午10時50分

在繼續我的最後一篇文章關於Zend_Navigation, 為sitemap.xml的請求路由到自定義控制器/動作 ,這篇文章是關於dymnamically添加頁面到Zend_Navigation容器在運行時/腳本的執行。

它的一切都很好在您的網頁指定INIXML的文件,但在某些時候你將不得不改變在您的網站頁面,你要的一部分,一個菜單,網站地圖,或包含在您的麵包屑。 因此,我們需要做的就是添加網頁到我們 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大概;)),否則這將是相當昂貴,每個頁面加載。

6回應“動態添加頁面到Zend_Navigation容器在運行時”

  1. 文先生 說:

    這正是我所期待的 - 感謝您一個真正的明顯例子。 乾杯。 Ğ

  2. A387 說:

    好貼! 我已經有些麻煩發起一個模型類中的引導。 任何線索為何申請 /模型類不能從引導? 你的類是所謂的'新的新聞()',而不是我想添加導航頁面通過獲取一個導航樹從一個模型類。 如果你有一個想法,請讓我知道! ;)

    • 我的模型是編輯的職位,其正確名稱代碼 Pro_News並回升,由自動加載。

      猜你不是使用模塊? 但如果這樣你的模型應該被稱為 _新聞的採埃孚拿起默認情況下(我不使用這個系統我自己)。

      我建議你檢查包括路徑從你的bootstrap方法,看它是否包含“應用程序/模式”或包含文件手動。

  3. 我的模型是編輯的職位,其正確名稱代碼 Pro_News並回升,由自動加載。

    猜你不是使用模塊? 但如果這樣你的模型應該被稱為 _新聞的採埃孚拿起默認情況下(我不使用這個系統我自己)。

    我建議你檢查包括路徑從你的bootstrap方法,看它是否包含“應用程序/模式”或包含文件手動。

給一個答复













全景主題 Themocracy

現在 8訪客在線
6位客人,2個機器人,0位會員
最大遊客今日:12日上午07點 57分聯合技術
本月:22日2011年8月6日上午12:30聯合技術
今年:130 28-03-2011下午10時 40聯合技術
所有時間:130 28-03-2011下午10時 40聯合技術