0

重複の可能性:
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ます。おそらくこれを試してみます。

4

2 に答える 2

1

ナビゲーション階層がないようです。ページ内にページが必要です。

例えば

Home Page
[pages] => Sign In
           [pages] => Forgot Password
        => Create Account
           [pages] => Confirm Account Email
                   => Email Confirmed

上記の場合、ブレッドクラムはホームページを除くすべてのアクティブなページにレンダリングされます...これを行うとすべてのページになります。

$this->navigation()->breadcrumbs()->setMinDepth(0); // don't skip the root page

あるいは、それは別のことかもしれませんが、言うのは難しいです。それがお役に立てば幸いです。

于 2009-12-17T21:33:44.530 に答える
0

これはおそらく汚い解決策ですが、Zend_Registryを使用してコンテナ参照を手動で次のように設定しました。

Zend_Registry::set( 'nav' . $menu, $container );

そしてそれをそのように吐き出します:

$main = Zend_Registry::get( 'nav' . $this->mainMenuId );
echo $this->navigation( $main )->breadcrumbs()->setMinDepth(0);
于 2009-12-20T22:59:43.980 に答える