2017-01-17 6 views
1

Я пытаюсь найти лучший способ кэширования html по ролям Sitecore. Я думаю, используя VaryByParam, но я не статически привязываю свои визуализации. Все они динамически добавляются на страницу. Я использую веб-формы, любая помощь будет оцененаПользовательский кеш Sitecore по роли

ответ

2

Итак, я в конечном итоге использовал часть вашего решения. Я добавляю ответ, потому что Это было не так просто, как просто включение 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/

1

«Vary By Parm» для кэша html Sitecore предназначен для параметров рендеринга. Зависят от ваших зависимостей кода вы выбираете правильный параметр кэша varBy (ов)

См:

creating-sitecore-sublayouts-dynamically

basics-of-html-caching

Иногда, если кэш по умолчанию HTML не должен совпадать с вашей логикой, вы можете использовать пользовательское кэширование Sitecore для тяжелых фрагментов или создать свой собственный «var By». См. Sitecore Custom Cache

+0

Спасибо за ответ. Я читал обе предоставленные статьи, и я все еще застрял. Я использую sublayouts в редакторе содержимого sitecore и те ссылки ascx-файлы. У нас много пользователей, но они разбиты на большие группы, такие как Althelete, Hobiest и т. Д. Эти группы все видят разное содержание. Я хочу, чтобы иметь возможность кэшировать вывод, зависящий от этих ролей, но не может для жизни меня выяснить, как перехватить конвейер кэша с текущей настройкой. У меня есть – KevinDev

+0

. Можете ли вы добавить образец кода вашей логики пользователя/группы. я думаю, вам нужно добавить группу пользователей в качестве «параметров рендеринга» или добавить ее в строку запроса. чем вы можете использовать этот кеш varBy .. otherwish the var by User, возможно, меньше хитов кэша. другой вариант Пользовательский кеш-файл Sitecore –

+0

Добавьте в ответ «Пользовательское решение кеша». –

 Смежные вопросы

  • Нет связанных вопросов^_^