При использовании WebControls в Sitecore есть способ настроить поведение кэширования — переопределить метод GetCachingID. Есть ли способ добиться чего-то подобного с помощью Sublayouts (UserControls)? Я хотел бы добавить пользовательские параметры «VaryBy» (пример — «Vary By Moon Position»).
Настройка кэширования подмакета в Sitecore
Ответы (1)
Да, кэширование подмакета по умолчанию может различаться по нескольким критериям. Для этого можно использовать различные параметры. Различия:
- Варьировать по данным
- Зависит от устройства
- Варьировать по логину
- Варьировать по параметрам
- Зависит от строки запроса
- Зависит от пользователя
Подход, который вы можете настроить здесь, — «Варьировать по параметрам», и ВЫ определяете, какие параметры есть. Вы можете сделать это в «Сведениях о презентации», где вы динамически назначаете подмакет элементу (внизу свойств элемента управления есть раздел для определения параметров), или вы можете установить это с помощью кода C#. Вот пример использования кода C# для статического назначения подмакета моему макету:
<h1>My website</h1>
<h2>My site is great</h2>
<sc:Sublayout ID="slMyControl" path="~/path/to/my/control.ascx" VaryByParm="true" Cachable="true" runat="server" />
(В приведенном выше коде следует отметить одну вещь: атрибут VaryByParam на самом деле равен VaryByParm
в Sitecore, что, очевидно, является опечаткой в их коде.)
Теперь в C# задайте параметры программно:
slMyControl.Parameters = "myKey1=MyVal1&myKey2=myVal2";
Если вы можете получить положение Луны в C#, то преобразуйте его в строку и присвойте параметрам:
slMyControl.Parameters = "position=" + getMoonPosition().ToString();
Недавно я кэшировал календарь по месяцам и годам, которые появляются в строке запроса. Простой пример без обработки ошибок:
slEventCalendar.Parameters = string.Format("m={0}&y={1}", Request.QueryString["m"], Request.QueryString["y"]);
Строка параметров, которую вы получите в конечном итоге, станет частью фактического ключа кэша. Связывая это с другими вариантами, просто создайте более сложный ключ кэша с большим количеством критериев и, следовательно, с большим количеством кэшированных экземпляров. Общее правило заключается в том, что кэшируйте по наименьшему количеству критериев, которые вам нужны, что приведет к максимальному использованию этого кэшированного экземпляра.
Sublayout sl = new Sublayout();
, а затем использовать C#, чтобы добавить его в заполнитель: ph.Controls.Add(sl);
- person Mark Ursino; 23.03.2013