Использование значений Treelist для запроса элемента Sitecore - PullRequest
0 голосов
/ 17 марта 2010

У меня есть предмет под названием All Recipes, который содержит рецепты с именами R1, R2 и R3. У меня есть еще один элемент под названием «Мои рецепты», в котором есть поле с древовидным списком «Рецепты», и он содержит выбранные значения R2 и R3 из элемента «Все рецепты». Запрос, который я пытаюсь написать, относится к полю «Предметы» RSS-канала.

Каков синтаксис запроса для отображения элементов во всех рецептах, которые отображаются в поле «Рецепты» в разделе «Мои рецепты»?

Ответы [ 4 ]

1 голос
/ 18 марта 2010

Это невозможно сделать с помощью запроса 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


Оставьте поле «Элементы RSS» пустым, так как этот пользовательский класс занимает свое место.

0 голосов
/ 22 ноября 2010

Я не могу комментировать пост Адама выше, поэтому я оставлю в качестве ответа: нет функции / метода Sitecore с именем sc:listfielditems. Можете ли вы еще раз проверить свой код?

0 голосов
/ 17 марта 2010

Вы используете SQL Server? Кулинарные книги Sitecore советуют сделать что-то вроде этого:

MyItems = GetSomeItems("/home/whatever/allrecipes");
foreach(Item item in MyItems)
{
    if(item is in MyRecipes)
        do something
}

Причина в том, что запрос для / home / what / allrecipes оптимизируется провайдером, тогда как сложная проверка запросов для MyRecipes будет более дорогостоящей.

Ссылка .

0 голосов
/ 17 марта 2010

Если вы пишете это в xslt, вы можете использовать sc:listfielditems('fieldname',$item), чтобы получить набор узлов элементов в древовидном списке, который затем можно будет выполнить с помощью for-each.

Если вы пишете это в .net, я не знаю - но я знаю парня, который делает, и я пошлю это ему.

...