2

我正在尝试将旧项目(基于 Sitecore 8.0 的店面)升级到 Sitecore 8.1 版本(目前是最新版本)。在此过程中,当我看到所有类别的相同产品时,我遇到了一个问题。因此,例如,我第一次选择一个类别并看到正确的产品。之后我选择任何其他类别,但仍然看到相同的产品(来自第一个类别)。这些数据由 ProductList 渲染(控制器渲染)返回,并且在第一次调用后不再运行(尝试在调试模式下达到 CatalogController 中的相应操作)。如果我们清除所有缓存(..sitecore/admin/cache.aspx) - 然后它会再次工作,但只是第一次。

我知道我无法禁用整个网站的缓存,我需要为显示商业数据的通用页面(项目名称中带有“*”)执行此操作 - 所以对于所有类别和产品页面。我在设计模式下检查了这个渲染,可以看到所有与缓存相关的复选框目前都未选中。不知道我错过了什么。

预先感谢您的帮助。

4

2 回答 2

4

我相信您在控制/子布局定义级别上启用了缓存,这将导致在网站上的每个页面上缓存该渲染,不久前我能够提出一个解决方案来禁用特定页面上特定渲染/子布局的缓存,同时将其缓存在其他页面上。

我基本上创建了一个带有复选框“取消缓存设置”的新渲染参数模板,然后在我的渲染定义项中,我将参数模板设置为新模板,如果您的网站在 Sitecore MVC 上运行,请执行以下操作:

创建一个名为“SetCacheability”的类

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

希望这可以帮助

于 2016-08-02T15:26:32.007 回答
1

您禁用的缓存设置位于控制级别的演示详细信息中:

表示级缓存

此外,您应该确保在您的子布局(或渲染)定义(在 /sitecore/Layout/Sublayouts 下)禁用缓存:

子布局定义缓存

于 2016-08-02T16:07:44.467 回答