1

我有这个时事通讯页面,它下面嵌套了一年中每个月的实际时事通讯。

我希望能够将父页面重定向到最新发布的页面。最好的方法是什么?

我真的不知道从哪里开始...我应该制作一个子布局用户控件并以编程方式重定向吗?或者有没有更优雅的方式来做到这一点......提前致谢!

4

2 回答 2

4

我不知道是否有这样做的“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);
于 2009-10-07T07:19:05.627 回答
3

将主页(即您要从中重定向的页面)的布局设置为 ashx 通用处理程序。这意味着不会以任何方式涉及 UI 代码。

只要以下假设成立,您就可以用更少的代码来完成: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; } }
    }
}
于 2009-10-15T01:49:34.387 回答