2011-07-14 6 views
2

更新 - 下記の更新をご覧ください。Zend_Navigationがキャッシュされているときにアクティブなページを設定していますか?

私はZFベースのCMSのパフォーマンスを向上させようとしており、メニュー構造を使用して作成したZend_Navigationオブジェクトをキャッシュしようとしています。オブジェクトをキャッシュすると、現在のページをアクティブにすることはできません。または、すべてのページのキャッシュにメニューのコピーがあります。

現在のページに関係なく、構造体のキャッシュを可能にするため、メニューの現在のページの強調表示をjQueryに移動しました。これはうまくいきます。その後、Breadcrumb_Helper(メニューと同じZend_Navigationオブジェクトを使用しています)には何も表示されませんでした。明らかに、アクティブに設定されたページがないためです。

私はページのIDを知っているので、Zend_Navigationオブジェクトの中に入ってその特定のものをアクティブにする方法はありますか?

理想的には私のような何かをしたいと思います:

 $nav->findOneBy("id", $currentPageId)->setActive(true); 

をしかし、このようなオブジェクト内のページにアクセスする方法があるようには思えません。コードを見て、findOneByを使用して現在のページを取得し、次にremovePageを削除し、収集したものをアクティブに設定し、addPageを使用して、収集された更新済みのページを戻すことができます。

もう1つのオプションは、Zend_Navigationオブジェクトの構築に使用する配列をキャッシュすることです。キャッシュからベース配列を取得した後、現在のページをアクティブに設定する方が簡単です。

(Iは、CMS内のすべてのページがちょうど/privacy/about-usのようなURLを持っており、デフォルトのフロントエンドモジュール、コントローラとアクションにルーティングされているので、ZFを許可するURLにはcontrollrt /アクションが存在しないことを指摘すべきですそれがどこにあるか動作するようにすること)

更新: エヘンは.... ...私は実際に動作しなかった提案したコードのように思えるし、実際にはもう少し簡単にマジックファインダーメソッドを使用して行うことができます。

 $nav->findOneById($currentPageId)->setActive(true); 

答えて

0

上記のように、このdoe実際に働く:

$nav->findOneById($currentPageId)->setActive(true); 
関連する問題