2009-10-06 58 views
1

我有这个时事通讯页面,每年的每个月都有实际的通讯嵌套在它下面。如何将父页面重定向到Sitecore 6中的子页面?

我希望能够将父页面重定向到最新发布的页面。什么是最好的方式来做到这一点?

我真的不知道从哪一个开始这一个...我应该做一个子布局用户控制和编程重定向?还是有一种更优雅的方式来做到这一点...提前致谢!

回答

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); 
+0

谢谢你的建议Zooking。我应该在哪里放这个代码?在子布局的代码隐藏中,而不是重定向?谢谢。 – 2009-10-08 01:38:24

+0

无论哪种情况,您都应该将代码放在“第一个”页面中使用的子布局的代码隐藏之后。然后,您可以选择将用户重定向到代码返回的项目,或者直接在子图层中显示项目。我不是搜索引擎大师,但我认为如果你做重定向,你会在搜索引擎中获得更好的排名,这样一个特定的时事通讯只有一个URL。 – Zooking 2009-10-08 06:42:48

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; } } 
    } 
} 
相关问题