Zend_Navigation を使用してブレッドクラムとメニューを設定する際に問題が発生しています。
まず、XML 構成オブジェクトを使用してページをセットアップします。
<?xml version="1.0" encoding="UTF-8"?>
<configdata>
<nav>
<home>
<label>Home</label>
<controller>Index</controller>
<action>index</action>
<id>home</id>
<resource>default</resource>
</home>
<crm>
<label>CRM</label>
<module>Crm</module>
<controller>Index</controller>
<action>index</action>
<id>crm</id>
<resource>Crm</resource>
<pages>
<persons>
<module>Crm</module>
<label>Personen</label>
<controller>Persons</controller>
<action>index</action>
</persons>
(...)etc.(...)
次に、私のブートストラップで:
//Bootstrap.php
$view = $layout -> getView();
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
$navigation = new Zend_Navigation($config);
$view -> navigation($navigation);
$view -> menu = $view -> navigation() -> menu();
$view -> breadcrumbs = $view -> navigation()->breadcrumbs()->setMinDepth(0);
アクティブな状態に移動するhttp://hostname/Crm/Persons/
と、ブレッドクラムも正しく表示されます。
ただし、http://hostname/Crm/Persons/inspect/id/3
(inspect がアクションで id がパラメーターである) に移動すると、ブレッドクラムは空になり、アクティブな状態のメニュー項目はありません。予想されるブレッドクラムは次のようなものですHome > CRM > Personen > John
。CRM と Personen はメニューでアクティブにする必要があります。
Zend のドキュメントからヒントが得られました。パラメーターが設定されているために機能していない可能性があります。
/*
* Dispatched request:
* - module: blog
* - controller: post
* - action: view
*/
$page = new Zend_Navigation_Page_Mvc(array(
'action' => 'view',
'controller' => 'post',
'module' => 'blog',
'params' => array('id' => null)
));
// returns false, because page requires the id param to be set in the request
$page->isActive(); // returns false
ただし、これを修正する方法がわかりません。考えは非常に高く評価されています。