2011-07-14 24 views
2

更新 - 請參閱下面的更新。當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); 

回答

0

如上所述,該母鹿s確實有效:

$nav->findOneById($currentPageId)->setActive(true);