2

更新-以下の更新を参照してください。

ZFベースのCMSのパフォーマンスを改善しようとしZend_Navigationています。また、メニュー構造を使用して作成したオブジェクトをキャッシュしようとしています。オブジェクトをキャッシュすると、現在のページをアクティブに設定できないか、すべてのページのメニューのコピーがキャッシュに保存されます。

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

ページのIDを知っている場合、オブジェクトの内部に入り、Zend_Navigationその特定のオブジェクトをアクティブに設定する方法はありますか?

理想的には、次のようなことをしたいと思います。

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

しかし、このようなオブジェクトのページにアクセスする方法はないようです。コードを見てfindOneBy、現在のページを取得してremovePageから削除し、収集したページをアクティブに設定し、収集してaddPage更新したページを元に戻すために使用することはオプションかもしれませんが、かなり複雑です。

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

(cms内のすべてのページには、、など/privacyのURLが/about-usあり、デフォルトのフロントエンドモジュール、コントローラー、アクションにルーティングされるため、URLにcontrollrt / actionがないため、ZFがどこにあるかを判断できます。 。)

更新: Ahem ....私が提案したコードは実際に機能したようで、実際にはマジックファインダーメソッドを使用してもう少し簡単に実行できます...:

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

1 に答える 1

0

上記のように、これは実際に機能します。

$nav->findOneById($currentPageId)->setActive(true);
于 2011-08-17T11:36:24.800 に答える