我有这个时事通讯页面,每年的每个月都有实际的通讯嵌套在它下面。如何将父页面重定向到Sitecore 6中的子页面?
我希望能够将父页面重定向到最新发布的页面。什么是最好的方式来做到这一点?
我真的不知道从哪一个开始这一个...我应该做一个子布局用户控制和编程重定向?还是有一种更优雅的方式来做到这一点...提前致谢!
我有这个时事通讯页面,每年的每个月都有实际的通讯嵌套在它下面。如何将父页面重定向到Sitecore 6中的子页面?
我希望能够将父页面重定向到最新发布的页面。什么是最好的方式来做到这一点?
我真的不知道从哪一个开始这一个...我应该做一个子布局用户控制和编程重定向?还是有一种更优雅的方式来做到这一点...提前致谢!
我不知道是否有这样做的“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; } }
}
}
谢谢你的建议Zooking。我应该在哪里放这个代码?在子布局的代码隐藏中,而不是重定向?谢谢。 – 2009-10-08 01:38:24
无论哪种情况,您都应该将代码放在“第一个”页面中使用的子布局的代码隐藏之后。然后,您可以选择将用户重定向到代码返回的项目,或者直接在子图层中显示项目。我不是搜索引擎大师,但我认为如果你做重定向,你会在搜索引擎中获得更好的排名,这样一个特定的时事通讯只有一个URL。 – Zooking 2009-10-08 06:42:48