更新 - 請參閱下面的更新。當Zend_Navigation被緩存時設置活動頁面?
我試圖提高我們基於ZF的CMS的性能,並嘗試緩存使用菜單結構創建的Zend_Navigation
對象。緩存對象意味着我無法將當前頁面設置爲活動狀態,或者我將在每個頁面的緩存中都有一份菜單副本。
爲了允許緩存結構,無論當前頁面是什麼,我已經將菜單中當前頁面的高亮顯示移至了jQuery,它運行良好。然後我注意到Breadcrumb_Helper
(它使用與菜單相同的Zend_Navigation
對象)沒有顯示任何內容 - 顯然是因爲我沒有將頁面設置爲活動狀態。
鑑於我知道頁面的ID,有沒有辦法讓Zend_Navigation
對象內部設置一個特定的活動?
理想我想這樣做:
$nav->findOneBy("id", $currentPageId)->setActive(true);
但似乎沒有要訪問這樣的對象的頁面的方式。查看代碼,使用findOneBy
獲取當前頁面,然後使用removePage
刪除它,然後將收集的一個設置爲活動狀態,並使用addPage
將收集的更新的設置恢復爲可能是一個選項,但相當複雜。
另一個選項是緩存我用來構造Zend_Navigation
對象的數組,從緩存中獲取基本數組後,更容易將當前頁設置爲活動狀態。 (我應該指出,cms中的所有頁面都只有像/privacy
,/about-us
這樣的URL,並且被路由到默認的前端模塊,控制器和操作,所以URL中沒有控制/操作以允許ZF制定出它在哪裏)
更新: 咳咳....好像我建議沒有實際工作的代碼,其實可以稍微簡單地使用魔法finder方法來完成...:
$nav->findOneById($currentPageId)->setActive(true);