2017-01-17 66 views
1

我想通過Sitecore角色來緩存html的最佳方式。我在想通過使用VaryByParam,但我沒有靜態綁定我的渲染。它們全部動態添加到頁面中。我正在使用Web表單,任何幫助將不勝感激按角色定製Sitecore緩存

回答

2

因此,我確實最終使用了部分解決方案1月號我添加了答案因爲e它並不像啓用Vary By Param那麼簡單。

首先,我必須實現一個RoleManager

public class RoleManager 
{ 
    private User currentUser; 
    public string GetReadRole(Item item) 
    { 
     currentUser = Sitecore.Context.User; 
     //int found = 0; 
     foreach (Role role in currentUser.Roles) 
     { 
      return role.LocalName; //return the role they are in 
     } 
     return ""; 

    } 
} 

然後我不得不作出從Sitecore.Web.UI.WebControls.Sublayout繼承替換Sitecore的默認sublayout一個sublayout。

protected RoleManager roleManager = new RoleManager(); 
    public override string GetCacheKey() 
    { 
     Sitecore.Sites.SiteContext site = Sitecore.Context.Site; 
     if ((Cacheable && ((site == null) || site.CacheHtml)) && !SkipCaching()) 
     { 
      if (VaryByParm) 
      { 
       return base.GetCacheKey() + "_#userRole:" + roleManager.GetReadRole(this.GetItem()); 
      } 

      return base.GetCacheKey(); 
     } 

     return string.Empty; 
    } 

現在都還剩下要做的就是增加一個sublayout渲染,以取代從Sitecore.Web.UI.SublayoutRenderingType

public override System.Web.UI.Control GetControl(NameValueCollection parameters, bool assert) 
    { 
     var sublayout = new RoleSublayout(); 
     foreach (string key in parameters.Keys) 
     { 
      ReflectionUtil.SetProperty(sublayout, key, parameters[key]); 
     } 
     return sublayout; 
    } 

繼承了渲染管道調用。這類的所有代碼現在完成,只需要添加到web.config 行修改爲

<control template="sublayout" type="Sitecore.Web.UI.SublayoutRenderingType, Sitecore.Kernel" propertyMap="Path=path" /> 

和它現在

<control template="sublayout" type="YOURNAMESPACE.RoleSublayoutRenderingType, DLLNAME" propertyMap="Path=path" /> 

編輯: 對於這個工作,你需要啓用VeryByParam在Sitecore的

這篇文章幫助我噸 http://sitecoreblog.alexshyba.com/sitecore_output_caching_kick_it_up_a_notch/

1

Sitecore html緩存的「Vary By Parm」用於渲染參數。取決於你的代碼依賴您選擇合適的varBy緩存參數(S)

參見:

creating-sitecore-sublayouts-dynamically

basics-of-html-caching

有時候,如果默認HTML緩存不是以配合你的邏輯,你可以使用自定義的Sitecore緩存重件或創建自己的「var By」請參閱Sitecore Custom Cache

+0

謝謝回答。我閱讀了所提供的兩篇文章,但仍然陷入困境。我在sitecore內容編輯器中使用子佈局,以及那些鏈接的ascx文件。我們有很多用戶,但他們被分成更大的組,如Althelete,Hobiest等。這些組都看到不同的內容。我想能夠緩存依賴於這些角色的輸出,但不能爲我的生活弄清楚如何攔截使用當前設置的緩存管道我有 – KevinDev

+0

您可以添加您的用戶/組邏輯的代碼示例。我想你需要將用戶組添加爲「渲染參數」或將其添加到查詢字符串中。比你可以使用這個varBy緩存.. otherwish var由用戶可能較小的緩存命中。其他選項自定義Sitecore緩存 –

+0

將自定義緩存解決方案添加到答案中。 –