我们正在寻找在Orchard网站上获取内容的RSS,然后使用C#解析它以将其粘贴到我们自己的数据库中。为此,我们需要RSS来获取自定义类型的每个字段。现在,当我获得投影的RSS时,我们得到标题,描述等的默认元素,但不是类型的字段。
另一方面,使用导入/导出模块,我可以获得自定义类型的所有字段,但模块不支持查询(这就是我们使用投影的原因)。
有没有办法获取某个类型的所有字段的RSS提要,但使用查询/投影?
答案 0 :(得分:5)
没有自动方法可以执行此操作,但您可以编写自己的模块来执行此操作。
您需要做的是添加一个实现Orchard.Core.Feeds.IFeedItemBuilder
接口的类。界面本身只需要实现一种方法 - void Populate(FeedContext context)
。
以下是如何实现此方法的代码段:
public void Populate(FeedContext context)
{
context.Response.Contextualize(
c => {
foreach (var feedItem in context.Response.Items.OfType<FeedItem<ContentItem>>())
{
var contentItem = feedItem.Item;
foreach (var part in contentItem.Parts)
{
// extract data you're interested in from parts
foreach (var field in part.Fields)
{
// extract data you're interested in from fields
feedItem.Element.SetElementValue("description", "Text to output to RSS");
}
}
}
});
}
context.Response.Items
包含将输出到RSS的所有项目。这里棘手的部分是知道要输出到RSS的数据,因为有许多不同的部分有许多不同的字段。并且它们都有不同的属性名称,您希望输出到RSS。
因此,我的建议是测试上面示例中的contentItem
是否属于您的自定义类型。如果是,请将其投射并使用您的自定义字段名称填充description
的{{1}}。