4

Orchard サイトのコンテンツの RSS を取得し、C# を使用して解析して独自のデータベースに貼り付けることを検討しています。これを行うには、RSS がカスタム タイプの各フィールドを取得する必要があります。現在、Projection の RSS を取得すると、タイトル、説明などのデフォルトの要素は取得されますが、タイプのフィールドは取得されません。

一方、インポート/エクスポート モジュールを使用すると、カスタム タイプのすべてのフィールドを取得できますが、モジュールはクエリをサポートしていません (これが、プロジェクションを使用している理由です)。

タイプのすべてのフィールドの RSS フィードを取得する方法はありますが、クエリ/プロジェクションを使用していますか?

4

1 に答える 1

5

これを自動的に行う方法はありませんが、これを行う独自のモジュールを作成できます。

あなたがする必要があるのは、Orchard.Core.Feeds.IFeedItemBuilderインターフェースを実装するクラスを追加することです。インターフェイス自体には、実装する必要があるメソッドが 1 つだけあります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.ItemsRSS に出力されるすべてのアイテムを保持します。ここで難しいのは、RSS に出力したいデータを知ることです。多くの異なるフィールドを持つさまざまな部分があるためです。RSS に出力したいプロパティ名はすべて異なります。

したがって、私の提案は、contentItem上記の例がカスタム タイプであるかどうかをテストすることです。そうである場合は、それをキャストし、カスタム フィールド名を使用してdescriptionそのfeedItem.

于 2012-12-11T20:46:57.053 に答える