sitecore RSS-кеширование - PullRequest
       14

sitecore RSS-кеширование

0 голосов
/ 13 октября 2011

Я работал над реализацией пользовательского RSS-канала в sitecore 6.4. Мое собственное поведение очень ограничено, все, что я фактически хотел, это добавить ссылку на автора (наше поле автора является справочным полем, поэтому мы не можем использовать встроенную атрибуцию автора).

Я переопределил RenderItem() в классе PublicFeed, чтобы я мог использовать свою собственную реализацию класса FeedRenderer (где находится логика автора). Мой подход следует этому шаблону , описанному Джоном Уэстом для добавления вашего собственного поведения рендеринга:

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. увы это тоже не работает, точка останова срабатывает каждый раз.

Может кто-нибудь дать совет по этому вопросу? документация просто рекомендует включать его на фактическом элементе подачи, а не на уровне рендеринга, но ни один из них не работает для меня. Интересно, что кеширование HTML работает в другом месте - а RSS также помещается в кеш HTML?

Заранее спасибо, Ник

1 Ответ

0 голосов
/ 14 октября 2011

-Установите флажок Cacheable в элементе определения канала.

-Убедитесь, что вы опубликовали элемент определения канала.

-Если вы не заполнили поле Cache Duration вэлемент определения канала должен иметь значение по умолчанию - один день.

- каналы отображаются в кэше Sitecore.Syndication.FeedManager.Cache, а не в кэше вывода сайта.Осмотрите этот объект кэша в отладчике Visual Studio после вызова вашего канала, а затем еще раз после вызова этого канала, чтобы попытаться увидеть, появляются ли какие-либо записи и отображаются ли несколько ключей кэша для одного и того же канала.Исследуйте метод Render ();если PublicFeed.IsCacheable () возвращает false (в зависимости от поля Cacheable в элементе определения канала), PublicFeed.Render () не кешируется.

- Убедитесь, что больше ничего не очищает кеши между вашими запросами на фид.

Тема форума SDN: http://sdn.sitecore.net/forum/ShowPost.aspx?PostID=40591

...