[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の設定のみを書きますので、サーチに関して別のブログを書きます。
さて、一通りやってみましょう。
1. RSSフィードアイテム追加
2.RSSフィードサブレアウトを追加
3.テストページを作成
4. このサブレイアウトを必要なところにおけばこのrssのアイコンをクリックで必要なクエリを追加すればいいそして、カスタムのクラスでそのクエリを流用すればいいです。
サンプルコードはこちら:
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]