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

あなたがすでに書いたコードを私たちは知らないので、私はただ推測しています…</p>

必要がある:

  • navigation()ビュー ヘルパーで使用される実際の Zend_Navigation コンテナを取得する
  • リクエストから取得したデータの配列から新しい Zend_Navigation_Page インスタンスを作成する
  • ページをコンテナに追加する
  • 新しいコンテナをナビゲーション ヘルパーに割り当てます

これは簡単なはずです。あなたが知る必要がある残り:

  • メソッドでコントローラープラグインを作成しpreDispatch、そこに上記を配置する方法、
  • このプラグインで現在のビュー インスタンスにアクセスする方法 (ビュー レンダラーまたはアプリケーション リソース/ブートストラップから)

次に、プラグインで、通常どおりビューでナビゲーション ビュー ヘルパーを操作します。

これでいくつかのことが明確になることを願っています。

于 2010-12-08T20:16:51.350 に答える
1

現時点ではリソースが限られているため、私の提案を実際に確認することはできませんが、コントローラーを使用している場合は、確認してください..


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

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

これをプラグインとして使用して、ビューをオーバーロードできますか? 次に、Navigation Container に追加しますか?

乾杯、
天使

于 2010-12-08T20:10:08.890 に答える
0

インスタンスを Zend_Registry に保存してから、プラグイン、モジュール ブートストラップ、またはアクション コントローラーからの postDispatch でページを元のナビゲーションに追加しないのはなぜですか?

于 2010-12-08T16:29:32.463 に答える