内部リンク、メディア リンク、外部リンクなどを含むことができるフィールドがあり、通常はアイテムとそれぞれのフィールドを sc:Link に指定して並べ替え、それに応じて URL を解決します。
プログラムで URL を解決したい場合 (Web サービスを使用してシリアル化して送信するため)、何をする必要がありますか?
正しい方向へのヒントや指針をいただければ幸いです。
内部リンク、メディア リンク、外部リンクなどを含むことができるフィールドがあり、通常はアイテムとそれぞれのフィールドを sc:Link に指定して並べ替え、それに応じて URL を解決します。
プログラムで URL を解決したい場合 (Web サービスを使用してシリアル化して送信するため)、何をする必要がありますか?
正しい方向へのヒントや指針をいただければ幸いです。
Sitecore API には、必要なものを直接実現するものは何もありませんが、必要なものを実現するヘルパー メソッドを作成できます。を使用していると仮定していますLinkField
。
Brian Pedersen のブログに、LinkManager および MediaManager を使用した Sitecore Linksに関する素晴らしい記事があります。彼の記事から抜粋した以下のコード スニペット:
Sitecore.Data.Fields.LinkField lf = Sitecore.Context.Item.Fields["Link"];
switch (lf.LinkType.ToLower())
{
case "internal":
// Use LinkMananger for internal links, if link is not empty
return lf.TargetItem != null ? Sitecore.Links.LinkManager.GetItemUrl(lf.TargetItem) : string.Empty;
case "media":
// Use MediaManager for media links, if link is not empty
return lf.TargetItem != null ? Sitecore.Resources.Media.MediaManager.GetMediaUrl(lf.TargetItem) : string.Empty;
case "external":
// Just return external links
return lf.Url;
case "anchor":
// Prefix anchor link with # if link if not empty
return !string.IsNullOrEmpty(lf.Anchor) ? "#" + lf.Anchor : string.Empty;
case "mailto":
// Just return mailto link
return lf.Url;
case "javascript":
// Just return javascript
return lf.Url;
default:
// Just please the compiler, this
// condition will never be met
return lf.Url;
}
内部 URL を解決してドメイン名で完全修飾する必要がある場合はUrlOptions.SiteResolving=True
、LinkManager
.
string url = linkField.GetFriendlyUrl();
linkField
のインスタンスはどこにありますかLinkField
。