我有這個時事通訊頁面,每年的每個月都有實際的通訊嵌套在它下面。如何將父頁面重定向到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