[Sitecore][RSS][RSS FEED]カスタムRSSフィードを作成する

かなり、遅いですけど・・・あけましておめでとうございます.2013年は私とってかなり忙しい年だった。ブログの方は昨年後半はほどんと書き機会がなかった。2014年こそ、ブログとメモ書きをもっと書きように頑張ります。

今日はRSSフィードの話をします。RSSフィードかなり古い話になりますがサイトコアバージョン5の時別のディバイスレイアウトを使っていました。バージョン6からそれが簡単に作れるようになりました。今回、その拡張性を使って、サーチの機能を再利用してフェードをの抽出を紹介したいです。なぜなら、これまでに作ったサイトで基本的にサイトコア標準のRSSフィードで十分だったが、ただサイトが大きくなると、RSSフィードを使う場所がもっと柔軟てあるように要求されます。ここで必要クエリーを収集します。

作者 

 作者ランティング blog/blogauthor/

  最新の作者

  人気の作者

 

 作者リスティング

  チャンル別リストblog/blogauthor/sort=chanel

  性別別リストblog/blogauthor/sort=gender

  。。。

カテゴリ

 カテゴランティング blog/category/

  最新のカテゴリ

  人気のカテゴリ

 カテゴリリスティング

   日付の順リストソートblog/category/sort=date

   コメントの順リストソート

トピック

 トピックランティング

  最新のトピック

  人気のトピック

 トピックリスティング

   日付の順リストソート

   コメントの順リストソート

編集者はそれぞれの場所にてRSSフィードを置きたいので、それぞれのアイテムにてRSSの設定するより、リクエストのクエリを使ってフィードを同じサーチの機能を再利用して抽出したい。

 *今回RSSの設定のみを書きますので、サーチに関して別のブログを書きます。

さて、一通りやってみましょう。

. RSSフィードアイテム追加

20140112_01

2.RSSフィードサブレアウトを追加

20140112_02

3.テストページを作成

20140112_03

20140112_04

. このサブレイアウトを必要なところにおけばこのrssのアイコンをクリックで必要なクエリを追加すればいいそして、カスタムのクラスでそのクエリを流用すればいいです。

20140112_05

サンプルコードはこちら:

RssFeed.ascx

using System;
using Sitecore.Configuration;
using Sitecore.Data;
using Sitecore.Data.Items;
using Sitecore.Links;
namespace local.sandbox.com.Website.layouts.Rssfeed
{
/// <summary>
    /// Summary description for RssfeedSublayout
    /// </summary>
    public partial class RssfeedSublayout : System.Web.UI.UserControl
    {
        private void Page_Load(object sender, EventArgs e)
        {
            Database masterDB = Factory.GetDatabase("master");
            Item rssFeed = masterDB.GetItem("/sitecore/content/Home/RSS Feed");
     if (rssFeed != null)
            {
                if (Request.QueryString.Count > 0)
                {
                    hlRss.NavigateUrl = LinkManager.GetItemUrl(rssFeed)
                     + "?rssfeed="
                     +  Sitecore.Context.Item.ID.ToShortID()
                     + "&"
                     + Request.QueryString;
                }
                else
                {
                    hlRss.NavigateUrl = LinkManager.GetItemUrl(rssFeed)
                     + "?rssfeed="
                     +  Sitecore.Context.Item.ID.ToShortID();
                }
            }
        }
    }
}

 

RssFeed.ascx.cs

using System.Collections.Generic;
using System.Web;
using Sitecore.Configuration;
using Sitecore.Data;
using Sitecore.Data.Items;
using Sitecore.Syndication;
namespace local.sandbox.com.Website.Sitecore_Extensions.RSS
{
    public class CustomPublicFeed : PublicFeed
    {
        Database webDB = Factory.GetDatabase("web");
   public override IEnumerable<Item> GetSourceItems()
        {
            List<Item> items = new List<Item>();
     string feedItem = HttpContext.Current.Request.QueryString["rssfeed"];
            Item contextItem = null;
     ID id = ShortID.DecodeID(feedItem);
            if (!id.IsNull)
            {
                contextItem = webDB.GetItem(id.ToString());
            }
     if (contextItem == null)
                return items;
            //ここで必要クエリーを収集します。
      string blog = HttpContext.Current.Request.QueryString["blog"];
            string category = HttpContext.Current.Request.QueryString["category"];
            string author = HttpContext.Current.Request.QueryString["author"];
            string topic = HttpContext.Current.Request.QueryString["topic"];
            string chanel = HttpContext.Current.Request.QueryString["chanel"];
            string gender = HttpContext.Current.Request.QueryString["gender"];
            string sortbty = HttpContext.Current.Request.QueryString["sortby"];
            string keyword = HttpContext.Current.Request.QueryString["keyword"];

            //ここにて、contextItem のテンプレートをもとにサーチを使って抽出したいデータを
            //必要なクエリーを使用します。ここで使用するクエリーはデータのリスティングで
            //使用するクエリーを流用していうので、既存のサーチの関数を再利用するばいい。
            return items;
        }
}
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です