我有这个时事通讯页面,它下面嵌套了一年中每个月的实际时事通讯。
我希望能够将父页面重定向到最新发布的页面。最好的方法是什么?
我真的不知道从哪里开始...我应该制作一个子布局用户控件并以编程方式重定向吗?或者有没有更优雅的方式来做到这一点......提前致谢!
我有这个时事通讯页面,它下面嵌套了一年中每个月的实际时事通讯。
我希望能够将父页面重定向到最新发布的页面。最好的方法是什么?
我真的不知道从哪里开始...我应该制作一个子布局用户控件并以编程方式重定向吗?或者有没有更优雅的方式来做到这一点......提前致谢!
我不知道是否有这样做的“Sitecore”方式,但是我会尝试以下方法之一:
而不是重定向,我只会在父页面上显示特定模板的第一个子节点。
正如您所建议的,制作一个将用户重定向到时事通讯的子布局。
这是一个适合您的代码。它获取最新发布的时事通讯,您可以在上述任一解决方案中使用它。
Item[] childs = currentItem.Axes.GetDescendants();
var itm = childs.AsQueryable().Where(c => c.TemplateName.ToLower().
Contains("newsletter")).OrderByDescending(c => c.Publishing.PublishDate).Take(1);
将主页(即您要从中重定向的页面)的布局设置为 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; } }
}
}