2011-01-14 5 views
1

私はメニューコンポーネントを持つページを持っています。このメニューは、アクティブな要素を異なるCSSクラスでマークします。コンポーネントによるテンプレートのコンテキストキャッシング

今、各メニュー項目のページをキャッシュします。異なるページはすべて同じモジュール/アクションから来ますが、違いはID​​です。

問題はメニューが1回だけキャッシュされることですが、すべてのメニュー項目にキャッシュバージョンが必要です。

キャッシュオプション "contextual:true"を試しましたが、メインテンプレート(barSuccess)が常に同じであるため、これは機能しません。

この問題を解決する方法はありますか?

答えて

2

あなたはコンポーネントにsf_cache_keyを渡すことによって、キャッシュキーを強制することができます。

include_component('menu', 'main', array('sf_cache_key' => $sf_params->get('item'))); 

この方法でコンポーネントを「アイテム」のすべての値のためにキャッシュされます。

別の方法は、パラメータの異なるセットを使用することである。

include_component('menu', 'main', array('item' => $sf_params->get('item'))); 

このように部品が同様のアイテムのすべての値のためにキャッシュされます。

最初の解決方法では、キャッシュキーを強制します。キャッシュを生成するかどうかを決定するカスタムロジックが必要な場合に便利です。

第2の解決方法は、渡されたパラメータ値のすべての組み合わせに対してコンポーネントがキャッシュされていることに依存しています(複数の場合があります)。

+0

あなたの答えはThxです。コンポーネントアクションでこのパラメータを設定することは可能ですか? layout.phpにいくつかのコンポーネントを使用していて、layout.phpにキャッシュキーを生成したくないので、私は尋ねています。 – ownking

+0

私はそれについては分かりません。あなたはいつでもヘルパーを使ってキャッシュキーを生成することができます。 –

+0

あなたの優先順位は何ですか?コンポーネントのsf_cache_keyまたはcache.ymlの "contextual:true"設定を設定する。私はその両方を使うべきか、いつもどちらか一方しか使うべきではありませんか? – ownking

関連する問題