【问题标题】:Setting active page when Zend_Navigation is cached?Zend_Navigation 缓存时设置活动页面?
【发布时间】:2023-04-04 03:03:01
【问题描述】:

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

我正在尝试提高基于 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中没有controllrt/action让 ZF 弄清楚它在哪里。)

更新: 咳咳……似乎我建议的代码确实有效,实际上可以使用魔术查找器方法更简单地完成……:

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

【问题讨论】:

    标签: zend-framework zend-navigation


    【解决方案1】:

    如上所述,这确实有效:

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

    【讨论】:

      猜你喜欢
      • 2011-07-28
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 2014-12-15
      • 2012-09-08
      • 2019-12-29
      相关资源
      最近更新 更多