更新 - 下記の更新をご覧ください。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);