【发布时间】:2010-12-04 09:12:03
【问题描述】:
我有这个时事通讯页面,其中嵌套了一年中每个月的实际时事通讯。
我希望能够将父页面重定向到最新发布的页面。最好的方法是什么?
我真的不知道从哪里开始...我应该制作一个子布局用户控件并以编程方式重定向吗?或者有没有更优雅的方式来做到这一点...在此先感谢!
【问题讨论】:
标签: content-management-system sitecore sitecore6
我有这个时事通讯页面,其中嵌套了一年中每个月的实际时事通讯。
我希望能够将父页面重定向到最新发布的页面。最好的方法是什么?
我真的不知道从哪里开始...我应该制作一个子布局用户控件并以编程方式重定向吗?或者有没有更优雅的方式来做到这一点...在此先感谢!
【问题讨论】:
标签: content-management-system sitecore sitecore6
我不知道是否有“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; } }
}
}
【讨论】: