扩展内部链接和外部链接以允许选择图像

时间:2014-04-28 09:25:06

标签: c# image hyperlink sitecore sitecore7

我需要扩展外部和内部链接的选择并提供图像选择。

请参阅下面的快照: enter image description here

此处上面的快照允许您添加外部链接的属性。在同一个弹出窗口中,我们可以添加一个字段Called Image(如屏幕截图所示),这将允许用户从媒体库中选择图像吗?

谢谢, 苏哈斯

3 个答案:

答案 0 :(得分:1)

如果您正在使用Sitecore 7.2并且想要更新内部链接,那么您需要使用Sitecore发言,如果是外部链接,只需在/ shell / Applications / Dialogs / ExternalLink文件夹下更新。

要渲染此字段,请创建CustomLinkRenderer类,并通过Sitecore.Kernel.dll的LinkRenderer继承此类。

Please see below code for CustomLinkRenderer

public class CustomLinkRenderer : LinkRenderer
    {
        public CustomLinkRenderer(Item item)
            : base(item)
        {

        }
        public override RenderFieldResult Render()
        {
            string str8;
            SafeDictionary<string> dictionary = new SafeDictionary<string>();
            dictionary.AddRange(this.Parameters);
            if (MainUtil.GetBool(dictionary["endlink"], false))
            {
                return RenderFieldResult.EndLink;
            }
            Set<string> set = Set<string>.Create(new string[] { "field", "select", "text", "haschildren", "before", "after", "enclosingtag", "fieldname" });
            LinkField linkField = this.LinkField;
            if (linkField != null)
            {
                dictionary["title"] = StringUtil.GetString(new string[] { dictionary["title"], linkField.Title });
                dictionary["target"] = StringUtil.GetString(new string[] { dictionary["target"], linkField.Target });
                dictionary["class"] = StringUtil.GetString(new string[] { dictionary["class"], linkField.Class });
            }
            string str = string.Empty;
            string rawParameters = this.RawParameters;
            if (!string.IsNullOrEmpty(rawParameters) && (rawParameters.IndexOfAny(new char[] { '=', '&' }) < 0))
            {
                str = rawParameters;
            }
            if (string.IsNullOrEmpty(str))
            {
                Item targetItem = this.TargetItem;
                string str3 = (targetItem != null) ? targetItem.DisplayName : string.Empty;
                string str4 = (linkField != null) ? linkField.Text : string.Empty;
                str = StringUtil.GetString(new string[] { str, dictionary["text"], str4, str3 });
            }
            string url = this.GetUrl(linkField);
            if (((str8 = this.LinkType) != null) && (str8 == "javascript"))
            {
                dictionary["href"] = "#";
                dictionary["onclick"] = StringUtil.GetString(new string[] { dictionary["onclick"], url });
            }
            else
            {
                dictionary["href"] = HttpUtility.HtmlEncode(StringUtil.GetString(new string[] { dictionary["href"], url }));
            }
            // Add onclick attribute for Google event tracking 
            dictionary["onclick"] = LinkField.GetAttribute("on_click");
            StringBuilder tag = new StringBuilder("<a", 0x2f);
            foreach (KeyValuePair<string, string> pair in dictionary)
            {
                string key = pair.Key;
                string str7 = pair.Value;
                if (!set.Contains(key.ToLowerInvariant()))
                {
                    FieldRendererBase.AddAttribute(tag, key, str7);
                }
            }
            tag.Append('>');
            if (!MainUtil.GetBool(dictionary["haschildren"], false))
            {
                if (string.IsNullOrEmpty(str))
                {
                    return RenderFieldResult.Empty;
                }
                tag.Append(str);
            }
            return new RenderFieldResult { FirstPart = tag.ToString(), LastPart = "</a>" };
        }
    }

您需要根据渲染图像的需要扩展此类。

答案 1 :(得分:0)

如果您正在讨论整个字段而不仅仅是富文本字段中的外部链接,那么您应该根据SDN中的文档创建自定义字段:

http://sdn.sitecore.net/Articles/API/Creating%20a%20Composite%20Custom%20Field.aspx

您可以从当前链接字段继承大多数功能。

答案 2 :(得分:0)

您实际上可以通过编辑/ shell / Applications / Dialogs

中的xml文件来扩展任何对话框

在另一个主题中,我展示了如何在标题字段中添加maxlength,这可以帮助您顺利开始:Limit number of Characters entered for Link Title Field in General Link