按角色自定义Sitecore缓存

时间:2017-01-17 04:19:40

标签: c# asp.net webforms sitecore

我正在试图找出通过Sitecore角色缓存html的最佳方法。我正在考虑使用VaryByParam,但我没有静态绑定我的渲染。它们都动态添加到页面中。我正在使用Web表单,任何帮助将不胜感激

2 个答案:

答案 0 :(得分:2)

所以我最终使用了你的部分解决方案Jan.我正在添加一个答案,因为它并不像启用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中的默认子布局。

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;
    }

现在剩下要做的就是添加一个子布局渲染来替换渲染管道调用。这个类继承自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" />

编辑: 为此,您需要在sitecore中启用VeryByParam

这篇文章对我有所帮助 http://sitecoreblog.alexshyba.com/sitecore_output_caching_kick_it_up_a_notch/

答案 1 :(得分:1)

Sitecore html缓存的“Vary By Parm”用于渲染参数。根据您的代码依赖性,您可以选择正确的varBy缓存参数

请参阅:

creating-sitecore-sublayouts-dynamically

basics-of-html-caching

有时,如果默认HTML缓存与您的逻辑不匹配,您可以使用自定义Sitecore缓存来处理重件或创建自己的“var By”请参阅Sitecore Custom Cache