Я пытаюсь найти лучший способ кэширования html по ролям Sitecore. Я думаю, используя VaryByParam, но я не статически привязываю свои визуализации. Все они динамически добавляются на страницу. Я использую веб-формы, любая помощь будет оцененаПользовательский кеш Sitecore по роли
ответ
Итак, я в конечном итоге использовал часть вашего решения. Я добавляю ответ, потому что Это было не так просто, как просто включение 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 "";
}
}
Тогда я должен был сделать sublayout, который наследуется от Sitecore.Web.UI.WebControls.Sublayout заменить 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;
}
Теперь все, что осталось сделать, это добавить sublayout рендеринга заменить рендеринг класс трубопровода calls.This унаследованный от 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" />
Edit: Для этой работы, Вам необходимо включить VeryByParam в Sitecore
Эта статья мне помогла тонн http://sitecoreblog.alexshyba.com/sitecore_output_caching_kick_it_up_a_notch/
«Vary By Parm» для кэша html Sitecore предназначен для параметров рендеринга. Зависят от ваших зависимостей кода вы выбираете правильный параметр кэша varBy (ов)
См:
creating-sitecore-sublayouts-dynamically
Иногда, если кэш по умолчанию HTML не должен совпадать с вашей логикой, вы можете использовать пользовательское кэширование Sitecore для тяжелых фрагментов или создать свой собственный «var By». См. Sitecore Custom Cache
Спасибо за ответ. Я читал обе предоставленные статьи, и я все еще застрял. Я использую sublayouts в редакторе содержимого sitecore и те ссылки ascx-файлы. У нас много пользователей, но они разбиты на большие группы, такие как Althelete, Hobiest и т. Д. Эти группы все видят разное содержание. Я хочу, чтобы иметь возможность кэшировать вывод, зависящий от этих ролей, но не может для жизни меня выяснить, как перехватить конвейер кэша с текущей настройкой. У меня есть – KevinDev
. Можете ли вы добавить образец кода вашей логики пользователя/группы. я думаю, вам нужно добавить группу пользователей в качестве «параметров рендеринга» или добавить ее в строку запроса. чем вы можете использовать этот кеш varBy .. otherwish the var by User, возможно, меньше хитов кэша. другой вариант Пользовательский кеш-файл Sitecore –
Добавьте в ответ «Пользовательское решение кеша». –