Sitecore: как получить доступ к тому же имени поля в разных разделах

У меня есть шаблон данных dt1 в sitecore, который имеет заголовок поля в разделе "данные". У меня также есть шаблон данных dt2, который имеет поле "заголовок" в разделе "Портал", Наконец, у меня есть шаблон данных dt3, который использует как dt1, так и dt2 в качестве базовых шаблонов.

Как я могу в xslt найти содержимое портала/заголовка?

В моем коде, когда я пишу < sc: text field = "header" / > , я получаю содержимое данных/заголовка (так как это первый node). Я знаю, как это сделать в .net, но мне нужно использовать xslt.

/callprat

Ответ 1

Вы не можете.

И, честно говоря, я не знаю ни одного поддерживаемого способа сделать это из .NET.

Это, прямо из Ссылка на определение данных, раздел 2.1.1

2.1.1 Поля шаблонов данных

Поле шаблона данных определяет пользователя управление интерфейсом и другие свойства влияющие на поведение поля в Редакторе содержимого и Редакторе страниц. Дополнительные сведения о полях см. В разделе Глава 4, Поле Шаблона.

Примечание. При определении имен полей убедитесь, что что они уникальны даже между полевые секции. И XSLT, и .NET код использует только имена полей, без ссылки на разделы, чтобы извлечь содержимое из полей.

Ответ 2

Я нашел способ обойти это .Net в проекте, над которым я работал. Один из шаблонов, который был настроен клиентом, имел "Ведра", которые имели разные разделы поля, но поля внутри были одинаковыми между ведрами. Я использовал LINQ для группировки полей по имени раздела, а затем занимался каждой группировкой полей.

var sections = currentItem.Fields.GroupBy(field => field.Section);
foreach (var section in sections)
{
    if (section.Key.StartsWith("Bucket"))
    {
        buckets.Add(new Bucket(section)); //I made a bucket item, 
                                          //and passed each IGrouping<Field> to it
    }
}

Ответ 3

item.Fields.Where(field => field.Section.ToUpper() == "META DATA" && 
                           field.DisplayName.ToUpper() == "TITLE").First().Value;

Ответ 4

Вы можете ссылаться на поля по их идентификаторам:

С#:

string value = item["{00000000-0000-0000-000000000000}"]

или

Field field = item.Fields["{00000000-0000-0000-000000000000}"]

Я не пробовал это, но я думаю, что он будет работать и в XSLT:

<sc:text field="{00000000-0000-0000-000000000000}" />