我一直致力于在sitecore 6.4中实现自定义RSS提要。我的自定义行为非常有限,我实际上想要为作者添加一个链接(我们的作者字段是引用字段,因此我们无法使用内置的作者归属)。sitecore RSS缓存
我在PublicFeed
类推翻RenderItem()
,这样我可以利用我自己实现的FeedRenderer
类(在这里笔者逻辑封装)的。我的做法是遵循这个pattern outlined by John West添加自己的呈现行为:
public class MyPUblicFeed: PublicFeed
{
protected override SyndicationItem RenderItem(Item item)
{
Assert.ArgumentNotNull(item, "item");
Control rendererControl = FeedUtil.GetFeedRendering(item);
if (rendererControl == null)
{
return null;
}
using (new ContextItemSwitcher(item))
{
var myRenderer= rendererControl as MyFeedRenderer;
if (myRenderer!= null)
{
myRenderer.Database = SitecoreHelper.CurrentDatabase.Name;
return myRenderer.RenderItem();
}
var renderer = rendererControl as Sitecore.Web.UI.WebControls.FeedRenderer;
if (renderer != null)
{
renderer.Database = SitecoreHelper.CurrentDatabase.Name;
return renderer.RenderItem();
}
}
throw new InvalidOperationException("FeedRenderer rendering must be of Sitecore.Web.UI.WebControls.FeedRenderer type");
}
}
现在我的渲染类:
public class MyFeedRenderer: Sitecore.Web.UI.WebControls.FeedRenderer
{
public override SyndicationItem RenderItem()
{
Item item = base.GetItem();
var syndicationItem = base.RenderItem();
//unfortunately we have to parse params again :(
FeedRenderingParameters feedRenderingParameter = FeedRenderingParameters.Parse(base.Parameters);
AddAuthor(syndicationItem, item, feedRenderingParameter);
return syndicationItem;
}
private static void AddAuthor(SyndicationItem syndicationItem, Item item, FeedRenderingParameters feedRenderingParameter)
{
//clear out authors added by base class
syndicationItem.Authors.Clear();
//logic for adding author here
}
}
这一切的伟大工程,正是输出我想要什么,但缓存元素似乎没有工作。我已在实际商品本身上设置了cacheable
标志,时间范围为01:00:00
。这似乎并不奏效 - 如果我在上述任一类中放置断点,则每次请求馈送时都会触发它。
所以然后我试图在控制级启用缓存,将VaryByData
缓存为MyFeedRenderer
渲染。唉,这也不管用,每次都会触发断点。
任何人都可以提供有关此事的任何建议吗?文档只是建议在实际的Feed项目上打开它,而不是在渲染级别上,但是对于我来说都没有效果。有趣的是,HTML缓存在别处工作 - RSS是否也放入了HTML缓存?
由于提前, 尼克
感谢这里添加您的输入约翰 - 良好的工作加入SO也:)你有没有想过专门为Sitecore的建立堆栈交换? – WickyNilliams