【问题标题】:How to get the url path for a general link in Sitecore 7.2 C# [duplicate]如何在 Sitecore 7.2 C# 中获取一般链接的 url 路径 [重复]
【发布时间】:2017-11-10 21:19:54
【问题描述】:

我对 Sitecore 和 C# 还很陌生,过去几天我一直在努力解决一些问题,所以我希望你们中的一个可以帮助我。

我刚刚从 Sitecore 6 升级到 7,并且发生了一些变化。以下代码曾经在 Sitecore 6 中工作,但您获取 LinkField 的 url 的方式不再工作。

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

我想我已经阅读/尝试了 google 上有关此问题的所有文章,但我似乎仍然无法正确理解。

【问题讨论】:

    标签: c# sitecore sitecore7 sitecore7.2


    【解决方案1】:

    从 Sitecore 7.2 开始,GetFriendlyUrl() 方法被添加到 LinkField 类来解决这个问题。

    Sitecore.Data.Fields.LinkField linkfield = targetItem.Fields["Link"];
    var url = linkfield.GetFriendlyUrl();
    

    GeneralLink in Sitecore

    【讨论】:

      【解决方案2】:

      您需要先检查您的链接字段类型,使用 linkfield.Url 仅适用于 sitecore 中的外部链接类型,您的代码应如下所示:

      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 : LinkUrl() 方法的代码 sn-p 取自 Answer

      【讨论】:

      • 非常感谢您的快速回复。像魅力一样工作! :)
      猜你喜欢
      • 2017-06-08
      • 2013-11-13
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多