Sitecore 7 では、クエリ文字列のほとんどがカスタム ルートになりました。例えば:
OLD: /calendar?year=2013&month=7&day=14
NEW: /calendar/2013/7/14
その結果、クエリ文字列ではなく、URL によってレンダリングの HTML キャッシュを変更する必要があることに気付きました。Sitecore は、MVC レンダリングの URL ごとにキャッシュを変更する便利な方法を提供していますか?
アップデート
私は、すべての MVC レンダリングがmvc.renderRenderingパイプラインを通過することを発見しました。そこでは、キャッシュ キーが次のクラスで生成されます。
Sitecore.Mvc.Pipelines.Response.RenderRendering.GenerateCacheKey
GenerateKey(Rendering rendering, RenderRenderingArgs args)
このクラスのメソッドをオーバーライドすることで、 site.Request.FilePath
. 私が今直面している問題は、このキャッシュ設定をレンダリング自体からどのように抽出するかということです。レンダリングで新しい「VaryByUrl」キャッシュ オプションを作成する必要があると思いますが、よくわかりません。
更新 2
次のコードを使用して、レンダリング定義アイテムからカスタム フィールドを読み取ることができました。機能しますが、定義アイテムのみを調べます (プレゼンテーションの詳細でのレンダリングの実際のインスタンスではありません)。
protected override string GenerateKey(Rendering rendering, RenderRenderingArgs args)
{
var key = base.GenerateKey(rendering, args);
if (rendering.RenderingItem.InnerItem.Fields["VaryByUrl"] != null)
{
var varyByUrl = ((CheckboxField)rendering.RenderingItem.InnerItem.Fields["VaryByUrl"]).Checked;
if (varyByUrl) key += GetUrlPart(rendering);
}
return key;
}