4

内部リンク、メディア リンク、外部リンクなどを含むことができるフィールドがあり、通常はアイテムとそれぞれのフィールドを sc:Link に指定して並べ替え、それに応じて URL を解決します。

プログラムで URL を解決したい場合 (Web サービスを使用してシリアル化して送信するため)、何をする必要がありますか?

正しい方向へのヒントや指針をいただければ幸いです。

4

2 に答える 2

16

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=TrueLinkManager.

于 2013-04-23T05:27:56.920 に答える
5
string url = linkField.GetFriendlyUrl();

linkFieldのインスタンスはどこにありますかLinkField

于 2014-08-27T17:58:00.760 に答える