実行時 に動的Zend_Navigationコンテナにページを追加
Zend_Navigation、約私の最後のポストで継続でカスタムコントローラ/アクションのsitemap.xmlにするためのリクエストをルーティングする 、このポストはdymnamicallyランタイム/スクリプトの実行時 にZend_Navigationコンテナにページの追加についてです。
そのすべてが順調と良いINIまたはでページを指定するXMLファイルがある時点で、メニューの一部として必要なサイトのページを変更する必要があるとしている、サイトマップ、またはあなたのパンくずリストに含まれる。 したがって、我々が何をする必要があるか、実行時に私たちのZend_Navigationコンテナにページを追加するだけです。 このための例としては、ニュースアイテム、ブログ記事、またはページのコメントなどを追加することになるだろう
この例では、私は私の静的に定義されたiniファイルの設定にいくつかのニュース記事を追加するつもりです。 私は次の形式で配列を返すクラスを使用してきた私のニュースの後のページの構成を取得するには:
$ pagesToAdd =配列( 0 => 配列( 'ラベル'=>'偽のニュース記事#5 ...', 'モジュール'=>'www'に、 "ルート'=>'WWW - index'は、 'アクション'=>'view'になって、 "コントローラは、'=>'ニュース'、 "paramsを'=>配列( 'ID'=> '5 -フェイク-ニュース階 - 5') )、 1 => 配列(/ *詳細ページの詳細情報* /)、 );
この関数はZend_Navigation_Page_Mvc用のconfigアレイを構成する配列を含有させた配列を返してきたことに気付くとわかるように。 したがって、配列をループして、新しいZend_Navigationページは、config配列から作成することができます。 ループの一部として、次に行うことは、正しい位置にページを追加することです( - > addPages()メソッドを代わりにページが使用して一括で追加することができます)。
これを行うには、あなたがサブページを追加し、単純にページを追加したいページを見つけます。 この場合、私は自分のページを検索するには、次のコードを使用している。
$容器 - > findOneByが('ラベル'、'最新のニュース') - >プリント範囲($ページ); ブートストラップで私の全体的なナビゲーションの初期化は、したがって、次のようになります。
/ ** *トップレベルのナビゲーションを処理するために使用 * * @戻りZend_Navigation * / 保護機能の_initNavigation() { の$ this ->ブートストラップ('レイアウト'); $レイアウト=の$ this ->メソッドgetResource('レイアウト'); $ビュー= $レイアウト - > getView(); $ CONFIG =新しいZend_Config_Iniは( APPLICATION_PATH。 "/のconfigs / navigation.ini"、APPLICATION_ENV); $コンテナ=新しいZend_Navigation($ CONFIG ->デフォルト); / /ここで最後の25のニュースレポートを追加 $ニュース=新しいニュース(); $ページ= $ニュース - > getNavigationEntries(); foreachの($ページ$ ASページ){ $ページ=新しいZend_Navigation_Page_Mvc($ページ); $容器 - > findOneByが('ラベル'、'最新のニュース') - >プリント範囲($ページ); } $ビュー - >ナビゲーション($コンテナ); }
追加する必要のあるものに(使用してキャッシングのいくつかのフォームですZend_Cacheを )そうでなければ、これは各ページの読み込みに非常に高価であることが起こっている、おそらくが)。


















































それは私が探していたものばかりだ - 本当に明確な例のための感謝。 乾杯。 G
投稿ニース! 私はいくつかのトラブルは、ブートストラップのモデルクラスを開始しました。 任意の手掛かりなぜアプリケーション/モデルクラスがブートストラップから利用できないですか? あなたのクラスは私がモデルクラスからナビゲーションツリーを取得することにより、ナビゲーションページを追加したいのではなく、"新しいニュースを()'と呼ばれます。 あなたのアイデアをお持ちの場合、私に知らせてください! ;)
私のモデルは、ポストのために編集された、コード内の正しい名前はPro_Newsであり、オートローダによってピックアップされています。
あなたがモジュールを使用していない推測? しかしそうであれば、モデルはZF用_Newsが(私はこのシステムを自分で使用していない)デフォルトで拾う呼び出す必要があります。
私はそれが"アプリケーション/モデル"または手動でファイルをインクルードが含まれているかどうかを確認するためにブートストラップのメソッドからインクルードパスをチェックすることをお勧めしたい。
さて私は、モジュール、私の悪いを使用してください。 しかし、あなたはオートローディングが動作するはず示唆している? まあ、私は少し深く、それを徹底的にしました。 現時点では私は、プリント範囲の実際のパフォーマンスフレンドリーではないBaseControllers内の関数、...壑壑を使用してください。 ご返信いただきありがとうございます。
あなたのモジュールのモデルの名前が正しいことを確認 _News(たとえば)、それがオートロードを使用してピックアップしてください。
私のモデルは、ポストのために編集された、コード内の正しい名前はPro_Newsであり、オートローダによってピックアップされています。
あなたがモジュールを使用していない推測? しかし、あなたのモデルを呼び出す必要があるので、場合 (私はこのシステムを自分で使用しない)、デフォルトでピックアップするZF用_News。
私はそれが"アプリケーション/モデル"または手動でファイルをインクルードが含まれているかどうかを確認するためにブートストラップのメソッドからインクルードパスをチェックすることをお勧めしたい。