У меня есть элемент с именем All Recipes, который содержит рецепты с именем R1, R2 и R3. У меня есть другой элемент с именем My Recipes, в котором есть поле treelist с именем Recipes, и оно содержит выбранные значения R2 и R3 из элемента All Recipes. Запрос, который я пытаюсь написать, относится к полю Items в RSS-канале.
Что такое синтаксис запроса для отображения элементов во всех рецептах, которые появляются в поле «Рецепты» «Мои рецепты»?Использование значений Treelist для запроса Sitecore Item
ответ
Это невозможно сделать с помощью запроса Sitecore. Вместо этого создайте собственный класс кормов, который расширяет Sitecore.Syndication.PublicFeed
и переопределяет GetSourceItems()
. Вот пример:
public class MyCustomFeed : Sitecore.Syndication.PublicFeed
{
public override IEnumerable<Sitecore.Data.Items.Item> GetSourceItems()
{
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Item contentFolder = master.GetItem("/sitecore/content/Home/MyContentFolder");
//Do your processing here to get your feed items
//I'm just grabbing what's in the content folder, but it could be something complex.
ChildList cl = contentFolder.GetChildren();
return cl;
}
}
Внутри поле Тип вашего RSS фида, в разделе расширяемости, введите путь класса и сборки для пользовательского класса:
Utility.SitecoreLibrary.RSS Folder.MyCustomFeed, Utility.SitecoreLibrary
Оставьте поле Items RSS Feed пустым, поскольку этот пользовательский класс займет свое место.
Если вы пишете это в xslt, вы можете использовать sc:listfielditems('fieldname',$item)
, чтобы получить набор узлов из списка, который вы можете перебрать с помощью for-each
.
Если вы пишете это в .net, я не знаю, но я знаю парня, который это делает, и я пошлю ему свой путь.
Используете ли вы SQL Server? В поваренном Sitecore советует вам сделать что-то вроде этого:
MyItems = GetSomeItems("/home/whatever/allrecipes");
foreach(Item item in MyItems)
{
if(item is in MyRecipes)
do something
}
Полагает, что запрашивая/дома/любой/Allrecipes оптимизирован провайдером, в то время как сложный запрос проверки MyRecipes будет более дорогостоящим.
Я не могу комментировать сообщение Адама выше, поэтому я оставлю в качестве ответа: нет функции/метода Sitecore с именем sc:listfielditems
. Можете ли вы дважды проверить свой код?
Я действительно ищу запрос, который я могу поместить в поле «Элементы» RSS-канала. Что-то в форме «query:/sitecore/content/home/* [QUERY TO Get ITEMS FROM TREELIST HERE]». –