Sitecore中的GeneralLink
我是Sitecore的新手。我创建了一个页面模板,并为General Link类型的URL添加了一个字段。 我为链接的文本创建了另一个字段(这是此项目中的标准做法)。
我只是想在我的用户控件中显示链接,但我不能让它工作。 这应该很简单,但我会围成一圈
这是我尝试过的代码示例..
ascx:
ascx.cs:
lnkMain.NavigateUrl = SiteCore.Context.Item.GetGeneralLink("Link1"); lnkMain.Text = item.GetFieldValue("Link1Text");
您应该小心使用linkField.Url
因为它会错误地呈现Sitecore项目和媒体的内部链接。 您应该使用Sitecore.Links.LinkManager.GetItemUrl(item)
和Sitecore.Resources.Media.MediaManager.GetMediaUrl(item)
。
根据链接类型,最好有一个帮助(扩展)方法为您返回正确的URL。 看看这个Sitecore链接与LinkManager和MediaManager博客文章,其中包含您需要的正确代码。
以供参考:
public static String LinkUrl(this 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; } }
用法:
Sitecore.Data.Fields.LinkField linkField = item.Fields["Link1"]; lnkMain.NavigateUrl = linkField.LinkUrl();
当然最好使用
控件让Sitecore为你处理它,但看起来你没有那个选项。
从Sitecore 7.2开始,有一个替代linkField.Url:
Sitecore.Data.Fields.LinkField linkField = item.Fields["Link1"]; lnkMain.NavigateUrl = linkfield.GetFriendlyUrl();
引入了一个新的LinkField.GetFriendlyUrl()方法。 无论字段包含哪种类型的链接,该方法都可以轻松输出有效的URL。 对于内部链接,该方法从LinkManager.GetItemUrl()返回一个URL。 对于媒体链接,该方法从MediaManager.GetMediaUrl()返回一个URL。 对于外部链接,锚链接,电子邮件链接和JavaScript链接,该方法返回LinkField.Url属性的值。 (400051)
https://techitpro.com/uncategorized/sitecore-7-2-changes/
如果使用Link控件会更容易:
这样,您不必执行任何代码隐藏的东西,您也可以使用页面编辑器。
你可以在下面使用
它会对你有用。
为项目的GeneralLink字段分配值时,弹出的“内部链接”对话框中会出现标记为“链接描述”的字段。 填写该值然后使用:
而已。 一切都在为你“自动”,自动神奇。
您需要获取项目的Linkfield
值,然后获取该项目的LinkField
类型。 这将为您提供“内部”,“外部”,“mailto”链接的类型,并且基于该链接可以获取链接字段的URL,因为@jammykam提到了这一点。
您也可以检索LinkText
。
以供参考 :
上述就是C#学习教程:Sitecore中的GeneralLink分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public static string GetGeneralLinkText(LinkField link) { text = ""; if (link == null) return false; if (!string.IsNullOrEmpty(link.Text)) { text = link.Text; return true; } switch (link.LinkType) { case "internal": if (link.TargetItem == null) return false; text = link["Text Field Name"]; break; case "external": case "mailto": case "anchor": case "javascript": text = link.Text; break; case "media": if (link.TargetItem == null) return false; Sitecore.Data.Items.MediaItem media = new Sitecore.Data.Items.MediaItem(link.TargetItem); text = media.Name; break; case "": break; default: return ""; } return link["Text Field Name"]; }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1039209.html