Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sitecore: Resolve Url programmatically from Field value

I have a field which can contain internal link, media link, external links etc and normally we sort it out by providing sc:Link the item and the respective field and it resolves the url accordingly.

If I wana resolve the url programmatically (to serialize and send over using web service) what do I need to do?

I would really appreciate tips or pointers towards the right direction.

like image 678
user446923 Avatar asked Nov 30 '22 13:11

user446923


1 Answers

There is nothing in the Sitecore API directly that will achieve what you need but you can create a helper method to achieve what you require. I'm assuming you are using a LinkField.

There is a great article on Brian Pedersen's blog about Sitecore Links with LinkManager and MediaManager. Code snippet below taken from his article:

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;
}

If you need to resolve the internal URL to be fully qualified with the domain name then pass in UrlOptions.SiteResolving=True to the LinkManager.

like image 132
jammykam Avatar answered Jan 28 '23 08:01

jammykam