我有一个可以包含内部链接、媒体链接、外部链接等的字段,通常我们通过提供 sc:Link 项目和相应的字段来对其进行排序,并相应地解析 url。
如果我想以编程方式解析 url(使用 Web 服务进行序列化和发送),我需要做什么?
我真的很感激提示或指向正确方向的提示。
我有一个可以包含内部链接、媒体链接、外部链接等的字段,通常我们通过提供 sc:Link 项目和相应的字段来对其进行排序,并相应地解析 url。
如果我想以编程方式解析 url(使用 Web 服务进行序列化和发送),我需要做什么?
我真的很感激提示或指向正确方向的提示。
Sitecore API 中没有任何内容可以直接满足您的需求,但您可以创建一个辅助方法来实现您的需求。我假设您使用的是LinkField
.
在 Brian Pedersen 的博客上有一篇很棒的文章,关于使用 LinkManager 和 MediaManager 的 Sitecore 链接。下面的代码片段取自他的文章:
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
。