Search code examples
c#sitecoresitecore7sitecore7.2

How to get the url path for a general link in Sitecore 7.2 C#


I am quite new to Sitecore and C#, and I've been struggling with something for the past few days, so I hope one of you guys can help me.

I've just upgraded from Sitecore 6 to 7 and there's been some changes. The following code used to work in Sitecore 6, but the way you get the url for the LinkField is not working anymore.

 protected string writeBalloon(Item targetItem)
    {
        string balloonString = "";

        Sitecore.Data.Fields.LinkField linkfield = targetItem.Fields["Link"];

        balloonString += "<a class='balloon-link' href='" + linkfield.Url + "'>";
        balloonString += "<div class='balloon'>";

        balloonString += "<h3>";
        balloonString += targetItem.Fields["Title"];
        balloonString += "</h3>";
        balloonString += "<p>";
        balloonString += targetItem.Fields["Text"];

        balloonString += "</p>";
        balloonString += "</div>";
        balloonString += "</a>";

        return balloonString;
    }

I think I have read/tried all articles on google regarding this matter, but I still can't seem to get it right.


Solution

  • You need to check your link field type first, Using linkfield.Url works only with External link type in sitecore , Here is how your code should look like :

    public String LinkUrl(Sitecore.Data.Fields.LinkField lf)
    {
        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;
        }
    }
    
    
    
    protected string writeBalloon(Item targetItem)
    {
            string balloonString = "";
    
            Sitecore.Data.Fields.LinkField linkfield = targetItem.Fields["Link"];
    
            balloonString += "<a class='balloon-link' href='" + LinkUrl(linkfield) + "'>";
            balloonString += "<div class='balloon'>";
    
            balloonString += "<h3>";
            balloonString += targetItem.Fields["Title"];
            balloonString += "</h3>";
            balloonString += "<p>";
            balloonString += targetItem.Fields["Text"];
    
            balloonString += "</p>";
            balloonString += "</div>";
            balloonString += "</a>";
    
            return balloonString;
    }
    

    Note : The code snippet taken for the LinkUrl() method is taken from this Answer