【问题标题】:How to redirect a parent page to a child page in Sitecore 6?如何在 Sitecore 6 中将父页面重定向到子页面?
【发布时间】:2010-12-04 09:12:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: content-management-system sitecore sitecore6


    【解决方案1】:

    我不知道是否有“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);
    

    【讨论】:

    • 感谢 Zooking 的建议。我应该把这段代码放在哪里?在子布局的代码隐藏中,而不是重定向?谢谢。
    • 在任何一种情况下,您都应该将代码放在“第一”页中使用的子布局的代码隐藏中。然后,您可以选择将用户重定向到代码返回的项目,或者直接在子布局中显示该项目。我不是搜索引擎专家,但我认为如果你进行重定向,你会在搜索引擎中获得更好的排名,这样一个特定的时事通讯只有一个 URL。
    【解决方案2】:

    将主页(即您要重定向的页面)的布局设置为 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; } }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      相关资源
      最近更新 更多