1

我的应用程序中有构成导航树的页面。我想使用请求的值将页面动态插入到我的导航中。我已经有了查找页面然后addPage()在其上调用方法的逻辑。我正在寻找的是如何轻松地将Zend_Controller_Request值传递给Zend_Navigation_Page::factory()以便我可以添加该页面。也许甚至写成一个插件?


解决方案

AngelP 是最接近的,所以我给了他信任,但这是我的解决方案:

$request = $this->getRequest();
if ($page = $this->view->siteNav->findBy('id', $page_id)) {
    $page->addPage(Zend_Navigation_Page::factory($request->getParams())
            ->setParams($request->getParams())
            ->setLabel($this->view->title)
            ->setVisible(false));
}

此代码从控制器操作执行。 是我在视图中的 $this->view->siteNav一个实例。从实例很容易传递给实例的方法,然后再传递给实例的方法。Zend_NavigationgetParams()Zend_Controller_RequestZend_Navigation_Page::factory()setParams()Zend_Navigation_Page_Mvc

4

3 回答 3

1

目前我的资源有限,所以我无法真正检查我的建议,但如果你在你的控制器中,你为什么不......


$controller = $this->_request->getControllerName();
$action = $this->_request->getActionName();

$page = new Zend_Navigation_Page( array(
                   'label' => "Sonny's Page",
                   'controller' => $controller,
                   'action' => $action
));

也许您可以将其用作插件,以便重载视图?然后添加到您的导航容器?

干杯,
天使

于 2010-12-08T20:10:08.890 回答
1

由于我们不知道您已经编写的代码,我只是猜测......</p>

你需要:

  • navigation()检索视图助手中使用的实际 Zend_Navigation 容器
  • 从请求中检索到的数据数组创建新的 Zend_Navigation_Page 实例
  • 将页面添加到容器中
  • 将新容器分配给导航助手

这应该很容易。其余你需要知道的:

  • 如何用preDispatch方法编写控制器插件,并将上面的内容放在那里,
  • 如何访问此插件中的当前视图实例(从视图渲染器或从应用程序资源/引导程序)

然后在插件中像往常一样在视图中操作导航视图助手。

希望这能澄清一些事情。

于 2010-12-08T20:16:51.350 回答
0

为什么不将实例存储在 Zend_Registry 中,然后在来自插件、模块引导程序或动作控制器的 postDispatch 中将页面添加到原始导航?

于 2010-12-08T16:29:32.463 回答