重複の可能性:
ZendFramework-マルチプレートナビゲーションブロック
私は自分のアプリケーションでブレッドクラムをレンダリングしようとしています(対応するZend Page Uriオブジェクトがあるホームページでさえも表示されません)。これには、プライマリとユーティリティの複数のナビゲーション領域があります。メニュー生成のために、以下を使用してレイアウト内からレンダリングするMenuControllerがあります。
$this->layout()->utility = $this->action('render', 'menu', null, array('menu' => $this->utilityId));
$this->layout()->nav = $this->action('render', 'menu', null, array('menu' => $this->mainMenuId));
utilityId
およびmainMenuId
プロパティは、データベースから取得した数値です。
Menuコントローラーのrenderメソッドは、配列を作成してZend Navigationオブジェクトを作成し、setContainerを呼び出してそのコンテナーに設定するだけです。かなり長いため、これは擬似コードです。
// MenuController.php
private function renderAction() {
$itemArray[] = array('label' => $label, 'uri' => $uri ); // in a loop
$container = new Zend_Navigation($itemArray);
if ( $container instanceof Zend_Navigation_Container ) {
$this->view->navigation()->setContainer( $container );
$uri = $this->_request->getPathInfo();
$item = $this->view->navigation()->findByUri($uri);
$item->active = true;
}
}
したがって、このrenderメソッドは、ユーティリティとナビゲーションのレイアウト内から2回呼び出されます。
編集: 問題は、コードが次のようになるように$containerを指定する必要があることだと思います
$this->navigation($container)->breadcrumbs();
しかし$this->action('render', 'menu' )
、$container
変数がそこに設定されていて返されないので、別の方法でコンテナを指定する方法はありますか?おそらく$this->layout()->nav
、コンテナを指すプロパティを使用します。
これは同じ問題のようで、誰かがそれらを設定/取得することを提案していZend_Registry
ます。おそらくこれを試してみます。