情況:
想象一下,我的內容樹中有一個位於'sitecore/Content/Home/mypage'的項目(頁面)。我想在.aspx佈局中創建一個超鏈接到這個項目。如何檢索sitecore超鏈接?
問:
如何才能在我的.aspx佈局創建超鏈接到這個項目嗎?
(記不住<asp:Hyperlink>
正確的語法)
情況:
想象一下,我的內容樹中有一個位於'sitecore/Content/Home/mypage'的項目(頁面)。我想在.aspx佈局中創建一個超鏈接到這個項目。如何檢索sitecore超鏈接?
問:
如何才能在我的.aspx佈局創建超鏈接到這個項目嗎?
(記不住<asp:Hyperlink>
正確的語法)
我不知道如果阿迪爾的例子中,URL由LinkProvider處理? 我會NavigateUrl屬性通常綁定在我的代碼隱藏
<asp:HyperLink ID="hlHyperLink" runat="server" Text="my link text" />
然後在C#
hlHyperLink.NavigateUrl = Sitecore.Links.LinkManager.GetItemUrl(Sitecore.Context.Database.GetItem("path_to_item"));
如果你需要獲得一個項目的代碼的網址,您是否正在使用它一個鏈接,你可以使用Sitecore.Links.LinkManager.GetItemUrl(item, options)
。
我建議不要使用它與一個參數(GetItemUrl(item)
),因爲它不會尊重配置選項(如禁用語言字符串作爲路徑的一部分:/en/path/to/item
可能會出現,而不是/path/to/item
)。
要使用的配置選項,您可以複製默認的網址選項:
var opts = (UrlOptions) UrlOptions.DefaultOptions.Clone();
var url = LinkManager.GetItemUrl(item, opts);
我用這往往不夠,我用下面的擴展方法:
public static string GetUrl(this Item source, bool absolutePath = false)
{
if (source == null)
throw new ArgumentNullException("source");
var options = (UrlOptions) UrlOptions.DefaultOptions.Clone();
options.AlwaysIncludeServerUrl = absolutePath;
return LinkManager.GetItemUrl(source, options);
}
的優勢,使用此格式是它允許你通過ID來標識一個項目並鏈接到它,而不管它在內容樹中的什麼位置。
我是否需要觸摸簡單內容的超級鏈接代碼隱藏?這將是不幸的。這不是煩人的?還是每個人都接受它作爲無論出於何種原因的最佳方式? – sean 2012-07-26 13:44:42
@EricTurner,它取決於上下文。在某些情況下,鏈接到路徑是有道理的,在其他情況下,您希望鏈接到基於ID的項目。 – zzzzBov 2012-07-26 13:50:57
@EricTurner如果你不想編輯它,你會怎麼建議在佈局的代碼文件中創建一個鏈接?如果你想要一個頁面上的鏈接,並且它有一個Rich Text字段,你可以使用它。但是那隻會是那個頁面。也許我們誤解了你想完成的事情?您是否想添加使用該佈局的所有頁面上的鏈接?還是隻有一個文本的頁面,你想要一個鏈接? – Holger 2012-07-26 14:52:20