缓存Zend_Navigation时设置活动页面?

时间:2011-07-14 13:28:22

标签: zend-framework zend-navigation

更新 - 请参阅下面的更新。

我正在尝试提高基于ZF的CMS的性能,并尝试使用菜单结构缓存我创建的Zend_Navigation对象。缓存对象意味着我无法将当前页面设置为活动,或者我将在每个页面的缓存中都有一个菜单副本。

为了允许缓存结构,无论当前页面如何,我都将菜单中当前页面的突出显示移动到了jQuery,这很好用。然后我注意到Breadcrumb_Helper(使用与菜单相同的Zend_Navigation对象)没有显示任何内容 - 显然是因为我没有将页面设置为活动状态。

鉴于我知道页面的ID,是否有办法进入Zend_Navigation对象以将该特定对象设置为活动状态?

理想情况下,我想做类似的事情:

        $nav->findOneBy("id", $currentPageId)->setActive(true);

但似乎没有办法像这样访问对象中的页面。查看代码,使用findOneBy获取当前页面,然后removePage删除它,然后将收集的一个设置为活动状态,并使用addPage将收集的更新后的一个恢复in可能是一种选择,但相当复杂。

另一种选择就是缓存我用来构造Zend_Navigation对象的数组,在从缓存中获取基本数组后,可以更容易地将当前页面设置为活动状态。

(我应该指出,cms中的所有页面都只有/privacy/about-us等网址,并且路由到默认的前端模块,控制器和操作,因此没有controllrt /在网址中执行操作以允许ZF找到它所在的位置。)

更新 嗯....好像我建议的代码实际上工作了,实际上可以使用魔术探测器方法更简单地完成......:

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

1 个答案:

答案 0 :(得分:0)

如上所述,这确实有效:

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