我有一个名为“所有食谱”的项目,其中包含名为 R1、R2 和 R3 的食谱。我有另一个名为“我的食谱”的项目,它有一个名为“食谱”的树列表字段,它包含从“所有食谱”项目中选择的值 R2 和 R3。我正在尝试编写的查询是针对 RSS Feed 的 Items 字段。
显示“我的食谱”的“食谱”字段中出现的“所有食谱”中的项目的查询语法是什么?
4 回答
这不能通过 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 Feed 的 Type 字段中,在 Extensibility 部分下,输入自定义类的类路径和程序集:
Utility.SitecoreLibrary.RSS Folder.MyCustomFeed, Utility.SitecoreLibrary
将 RSS Feed 的 Items 字段留空,因为这个自定义类取代了它的位置。
如果您在 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
}
原因是对 /home/whatever/allrecipes 的查询由提供程序优化,而对 MyRecipes 的复杂查询检查成本更高。
参考。
我无法对上面亚当的帖子发表评论,所以我将作为答案离开:没有名为的 Sitecore 函数/方法sc:listfielditems
。你能仔细检查你的代码吗?