Sitecore: Как использовать параметры подслоя из codebehind? - PullRequest
5 голосов
/ 10 мая 2011

Как получить значения из поля «Параметры» (второй снимок экрана) в выделенном фрагменте подслоя?

Я понимаю, что могу получить / установить параметры рендеринга (в частности, подслоя), когда он добавляется в детали представления элемента, как описано здесь ( Sitecore 6 - с использованием параметров ).

layout instance parameters

Однако я бы хотел использовать поле параметров из элемента определения макета. В коде за файлом, принадлежащим определению макета, я могу привести родителя к подслоям, и этот объект также имеет свойство .Parameters, однако в нем нет ожидаемых значений.

layout definition parameters

Это метод Page_Load в контрольном коде:

protected void Page_Load(object sender, EventArgs e)
{
    var sublayout = ((Sublayout)this.Parent);
    string rawParameters = Attributes["sc_parameters"];
    NameValueCollection parameters =
      Sitecore.Web.WebUtil.ParseUrlParameters(rawParameters); 
      //parameters contains values from "Additional parameters (first screenshot)

      //I do not know the sublayout item id or sublayout path, so how do I get
      //the values from the second screenshot?
}

Двойная проверка по-прежнему не работает, отображаются только additional parameters:

Step 1 - Enter parameters

Step 2 - Add sublayout + parameters to presentation

Step 3 - Display parameters on sublayout

Step 4 - Validate result

Ответы [ 2 ]

11 голосов
/ 10 мая 2011

Как это:

var sublayout = ((Sublayout)this.Parent);
NameValueCollection nvc = Sitecore.Web.WebUtil.ParseUrlParameters(sublayout.Parameters);

Вот запись в блоге, которая облегчает использование методов расширения .

Вот модуль общего исходного кода для Sitecore, который также включает это в класс . Он был написан Джоном Вестом, техническим директором Sitecore USA.

2 голосов
/ 11 мая 2011

Вы можете получить параметры, определенные в подслое, но оно немного затянуто. Сначала нужно найти правильный элемент рендеринга, а затем получить параметры

   var sublayout = ((Sublayout)this.Parent);
   //Get all rendering
   var renderings = Sitecore.Context.Item.Visualization.GetRenderings(Sitecore.Context.Device, true);

   //Get the first rendering that matches the current sublayout's path
   var sublayoutRendering = renderings.FirstOrDefault(r => r.RenderingItem.InnerItem["Path"] == sublayout.Path);

   if (sublayoutRendering != null)
         Response.Write(sublayoutRendering.RenderingItem.Parameters);

Вы можете использовать способ Марка, чтобы получить параметры для параметров, установленных в «Сведениях о макете»

РЕДАКТИРОВАТЬ: вышеуказанное решение будет работать, но оно очень хрупкое и зависит от внутренних компонентов sitecore, которые могут измениться в будущем. Я бы не рекомендовал вам идти с ним в производство. Должен быть лучший способ достичь того, чего вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...