Sitecore > 禁用 html 渲染缓存
Sitecore > Disable html caching of a rendering
我正在尝试将旧项目(基于 Sitecore 8.0 的店面)升级到版本 Sitecore 8.1(目前最新的)。
在此过程中,当我看到所有类别的相同产品时,我遇到了一个问题。因此,例如,我第一次 select 一个类别并看到正确的产品。之后我选择任何其他类别,但仍然看到相同的产品(来自第一个类别)。
这些数据由 ProductList 渲染(控制器渲染)返回,并且在第一次调用后不再 运行(试图在调试模式下在 CatalogController 中达到相应的操作)。
如果我们清除所有缓存(..sitecore/admin/cache.aspx) - 然后它再次工作,但只是第一次。
我知道我无法为整个站点禁用缓存,我需要为显示商业数据的这个通用页面(项目名称中带有“*”)禁用缓存 - 所以对于所有类别和产品页。我在设计模式下检查了这个渲染,可以看到所有与缓存相关的复选框目前都没有被选中。不知道我错过了什么。
提前感谢您的帮助。
我相信您在 control/sublayout 定义级别启用了缓存,这将导致在网站的每个页面上缓存该渲染,不久前我想出了一个禁用缓存的解决方案在特定页面上特定 rendering/sublayout,同时在其他页面上保持缓存。
我基本上创建了一个带有复选框的新渲染参数模板"Cancel Cache Settings",然后在我的渲染定义项中,我将参数模板设置为新模板,如果您的站点在 Sitecore MVC 上运行,请执行以下操作:
创建一个名为 'SetCacheability'
的 class
namespace Sitecore.SharedResources.Pipelines.Rendering
{
public class SetCacheability : Sitecore.Mvc.Pipelines.Response.RenderRendering.SetCacheability
{
protected override bool IsCacheable(Sitecore.Mvc.Presentation.Rendering rendering, Sitecore.Mvc.Pipelines.Response.RenderRendering.RenderRenderingArgs args)
{
if (!String.IsNullOrEmpty(rendering.Parameters["Cancel Cache Settings"])
&& rendering.Parameters["Cancel Cache Settings"] == "1")
{
return false;
}
return base.IsCacheable(rendering, args);
}
}
}
在您的包含文件夹中创建补丁配置文件:
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<pipelines>
<mvc.renderRendering>
<processor patch:instead="processor[@type='Sitecore.Mvc.Pipelines.Response.RenderRendering.SetCacheability, Sitecore.Mvc']"
type="Sitecore.SharedResources.Pipelines.Rendering.SetCacheability, [YOUR ASSEMBLY NAME]"/>
</mvc.renderRendering>
</pipelines>
</sitecore>
</configuration>
这是我写的博客:http://www.sitecorecoding.com/2014/09/disabling-caching-for-rendering-on-some.html
希望对您有所帮助
您禁用的缓存设置位于控件级别的演示文稿详细信息中:
此外,您应该确保在您的子布局(或呈现)定义(在 /sitecore/Layout/Sublayouts 下)禁用缓存:
我正在尝试将旧项目(基于 Sitecore 8.0 的店面)升级到版本 Sitecore 8.1(目前最新的)。 在此过程中,当我看到所有类别的相同产品时,我遇到了一个问题。因此,例如,我第一次 select 一个类别并看到正确的产品。之后我选择任何其他类别,但仍然看到相同的产品(来自第一个类别)。 这些数据由 ProductList 渲染(控制器渲染)返回,并且在第一次调用后不再 运行(试图在调试模式下在 CatalogController 中达到相应的操作)。 如果我们清除所有缓存(..sitecore/admin/cache.aspx) - 然后它再次工作,但只是第一次。
我知道我无法为整个站点禁用缓存,我需要为显示商业数据的这个通用页面(项目名称中带有“*”)禁用缓存 - 所以对于所有类别和产品页。我在设计模式下检查了这个渲染,可以看到所有与缓存相关的复选框目前都没有被选中。不知道我错过了什么。
提前感谢您的帮助。
我相信您在 control/sublayout 定义级别启用了缓存,这将导致在网站的每个页面上缓存该渲染,不久前我想出了一个禁用缓存的解决方案在特定页面上特定 rendering/sublayout,同时在其他页面上保持缓存。
我基本上创建了一个带有复选框的新渲染参数模板"Cancel Cache Settings",然后在我的渲染定义项中,我将参数模板设置为新模板,如果您的站点在 Sitecore MVC 上运行,请执行以下操作:
创建一个名为 'SetCacheability'
的 classnamespace Sitecore.SharedResources.Pipelines.Rendering
{
public class SetCacheability : Sitecore.Mvc.Pipelines.Response.RenderRendering.SetCacheability
{
protected override bool IsCacheable(Sitecore.Mvc.Presentation.Rendering rendering, Sitecore.Mvc.Pipelines.Response.RenderRendering.RenderRenderingArgs args)
{
if (!String.IsNullOrEmpty(rendering.Parameters["Cancel Cache Settings"])
&& rendering.Parameters["Cancel Cache Settings"] == "1")
{
return false;
}
return base.IsCacheable(rendering, args);
}
}
}
在您的包含文件夹中创建补丁配置文件:
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<pipelines>
<mvc.renderRendering>
<processor patch:instead="processor[@type='Sitecore.Mvc.Pipelines.Response.RenderRendering.SetCacheability, Sitecore.Mvc']"
type="Sitecore.SharedResources.Pipelines.Rendering.SetCacheability, [YOUR ASSEMBLY NAME]"/>
</mvc.renderRendering>
</pipelines>
</sitecore>
</configuration>
这是我写的博客:http://www.sitecorecoding.com/2014/09/disabling-caching-for-rendering-on-some.html
希望对您有所帮助
您禁用的缓存设置位于控件级别的演示文稿详细信息中:
此外,您应该确保在您的子布局(或呈现)定义(在 /sitecore/Layout/Sublayouts 下)禁用缓存: