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}" />