用于MVC渲染的URL的变化缓存?

时间:2013-07-14 18:23:35

标签: sitecore sitecore7 sitecore-mvc

使用Sitecore 7,我的大多数查询字符串都成为自定义路由。例如:

OLD: /calendar?year=2013&month=7&day=14
NEW: /calendar/2013/7/14

因此,我发现自己需要通过URL而不是查询字符串来改变我的渲染的HTML缓存。 Sitecore是否提供了一种通过URL为MVC渲染改变缓存的便捷方式?

更新

我发现所有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;
}

1 个答案:

答案 0 :(得分:1)

我们还需要VaryByUrl,但需要使用WebForms架构(v.6.5.0)。

对于子布局定义,我覆盖Sublayout类以添加VaryByUrl,类似于上面的完成方式。

假设您的Sitecore版本仍然使用相同的渲染参数模板,对于渲染的实例,您必须创建自己的/ sitecore / templates / System / Layout / Rendering Parameters /的Source字段中引用的类的版本。标准渲染参数/缓存/缓存。

这是Source字段中的类引用: 键入= Sitecore.Shell.Applications.Layouts.DeviceEditor.CachingField,Sitecore.Client