更新- 请参阅下面的更新。
我正在尝试提高基于 ZF 的 CMS 的性能,并尝试缓存Zend_Navigation
我使用菜单结构创建的对象。缓存对象意味着我不能将当前页面设置为活动页面,否则我将在每个页面的缓存中都有一份菜单副本。
为了允许缓存结构,无论当前页面如何,我已将菜单中当前页面的突出显示移至 jQuery,它运行良好。然后我注意到Breadcrumb_Helper
(它使用与Zend_Navigation
菜单相同的对象)没有显示任何内容 - 显然是因为我没有将页面设置为活动状态。
鉴于我知道页面的 id,有没有办法进入对象内部Zend_Navigation
以将该特定对象设置为活动状态?
理想情况下,我想做类似的事情:
$nav->findOneBy("id", $currentPageId)->setActive(true);
但似乎没有办法像这样访问对象中的页面。查看代码,findOneBy
用于获取当前页面,然后removePage
将其删除,然后将收集的页面设置为活动页面,并使用addPage
将收集的更新的页面放回可能是一种选择,但相当复杂。
另一种选择只是缓存我用来构造Zend_Navigation
对象的数组,在从缓存中获取基本数组之后,将当前页面设置为活动页面会更容易。
(我应该指出,cms 中的所有页面都只有 , 和之类的 url /privacy
,/about-us
并被路由到默认的前端模块、控制器和操作,因此 url 中没有 controllrt/action 来允许 ZF 确定它在哪里.)
更新: 咳咳......似乎我建议的代码确实有效,实际上可以使用魔术查找器方法更简单地完成......:
$nav->findOneById($currentPageId)->setActive(true);