Как перенаправить родительскую страницу на дочернюю страницу в Sitecore 6? - PullRequest
1 голос
/ 06 октября 2009

У меня есть эта страница новостной рассылки, на которой есть фактические новостные рассылки, вложенные в нее для каждого месяца года.

Я хочу, чтобы родительская страница перенаправлялась на последнюю опубликованную страницу. Каков наилучший способ сделать это?

У меня нет ни малейшего представления о том, с чего начать ... Должен ли я сделать пользовательский элемент управления подкомпоновкой и программно перенаправить? Или есть более элегантный способ сделать это ... Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 07 октября 2009

Я не знаю, есть ли способ «Sitecore» для этого, однако я бы попробовал одно из следующих:

  1. Вместо перенаправления я просто показал бы первый дочерний узел определенного шаблона на родительской странице.

  2. Как вы предложили, создайте подслой, который перенаправляет пользователя на информационный бюллетень.

Вот код, который должен работать для вас. Он получает последнюю опубликованную новостную рассылку, которую можно использовать в любом из указанных выше решений.

Item[] childs = currentItem.Axes.GetDescendants();

var itm = childs.AsQueryable().Where(c => c.TemplateName.ToLower().
Contains("newsletter")).OrderByDescending(c => c.Publishing.PublishDate).Take(1);
3 голосов
/ 15 октября 2009

Установите макет главной страницы (т. Е. Ту, с которой вы хотите перенаправить) в качестве универсального обработчика ashx. Это означало бы, что код пользовательского интерфейса никак не связан.

Вы можете сделать это с намного меньшим количеством кода, если выполняются следующие предположения: 1. Все дочерние элементы являются информационными бюллетенями 2. Самые последние находятся вверху (например, элементы отсортированы по дате выпуска)

namespace YourSite
{
    public class NewsletterHandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            Item item = Sitecore.Context.Item.Children[0];
            string url = Sitecore.Links.LinkManager.GetItemUrl(item);
            context.Response.Redirect(url);
        }

        public bool IsReusable { get { return false; } }
    }
}

Если приведенные выше допущения неверны, то найти последние опубликованные данные может быть не так просто, как получить дату публикации, как описано в Zooking. Это может быть, но если вы исправите более старую рассылку и повторно опубликуете, этот код может дать сбой (я думаю?). Если все в порядке, нет проблем, Zooking верен, в противном случае вы можете указать каждому информационному бюллетеню конкретное поле даты ... в этом случае используйте код, указанный здесь в вашем обработчике.

namespace YourSite
{
    public class NewsletterHandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            Item[] children = Sitecore.Context.Item.Axes.GetDescendants();
            Item item = children.AsQueryable()
                .Where(c => c.TemplateName.ToLower()
                .Contains("newsletter"))
                .OrderByDescending(c => DateTime.Parse(c["PublishDate"])).FirstOrDefault();
            string url = Sitecore.Links.LinkManager.GetItemUrl(item);
            context.Response.Redirect(url);
        }

        public bool IsReusable { get { return false; } }
    }
}
...