我正在使用Zend Framework 1.10.8。
我想在layout.phtml中创建一个breadcrumb部分。我的菜单中有一些链接包含动态网址参数,例如http://mydomain.com/editor/edit/id/42
我试图找出如何将id = XXX传递给Zend_Navigation,而XXX来自数据库,并且在每个请求中都不同。
我到目前为止找到的一个解决方案是添加一个属性,例如params_id到我的xml声明:
<pages>
<editor>
<label>Editor</label>
<controller>editor</controller>
<action>edit</action>
<params_id>id</params_id>
<route>default</route>
</editor>
</pages>
并在控制器中循环遍历页面并动态添加我的参数id = 42(而在最终版本中将从请求对象中检索42)
$pages = $this->view->navigation()->getContainer()->findAllBy('params_id','id');
foreach ($pages as &$page) {
$page->setParams(array(
'id' => 42,
'something_else' => 667
));
}
由于添加动态url参数似乎是Zend_Navigation的基本要求,我很确定我的解决方案太复杂,太昂贵,并且必须有一个更简单的解决方案“开箱即用”。
答案 0 :(得分:1)
很简单。只需写入XML
即可<pages>
<editor>
<label>Editor</label>
<controller>editor</controller>
<action>edit</action>
<params>
<id>42</id>
<someting_else>667</something_else>
</params>
<route>default</route>
</editor>
</pages>
以下是基于数据库数据动态执行此操作的示例
首先定义导航加载插件。将文件命名为Navigation.php并将其放在application / plugins /目录中。这是一个这样的插件的例子:
class Plugin_Navigation extends Zend_Controller_Plugin_Abstract
{
function preDispatch(Zend_Controller_Request_Abstract $request)
{
$view = Zend_Controller_Action_HelperBroker::getExistingHelper('ViewRenderer')->view;
//load initial navigation from XML
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml','nav');
$container = new Zend_Navigation($config);
//get root page
$rootPage = $container->findOneBy('sth', 'value');
//get database data
$data = Model_Sth::getData();
foreach ($data as $row) {
$rootPage->addPage(new Zend_Navigation_Page_Mvc(array(
'module' => 'default',
'controller' => 'examplecontroller',
'action' => 'exampleaction',
'route' => 'exampleroute',
'label' => $row['some_field'],
'params' => array(
'param1' => $row['param1'],
'param2' => $row['param1']
)
)));
}
//pass container to view
$view->navigation($container);
}
}
然后在你的Bootstrap init这个插件
protected function _initNavigation() {
Zend_Controller_Front::getInstance()->registerPlugin(new Plugin_Navigation());
}
答案 1 :(得分:1)
更新:我最终丢掉了xml文件。我现在做什么: