[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

[css]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();
}
}
}
}
}
[/css]

 

RssFeed.ascx.cs

[css]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;
}
}
}[/css]

Uncategorized