【问题标题】:Sitecore - Image field in parameter templateSitecore - 参数模板中的图像字段
【发布时间】:2013-11-06 22:42:00
【问题描述】:

如果我在参数模板中有图片字段,在c#中获取图片的URL涉及哪些步骤?

【问题讨论】:

    标签: sitecore


    【解决方案1】:

    @mdresser 提出了关于什么应该和不应该是渲染参数的有效观点。但是,我不认为 Sitecore 故意让在参数模板中使用图像字段变得困难。他们只是在现有的键值对渲染参数功能上构建了参数模板功能。

    如果渲染参数模板上的图片字段名称为BackgroundImage,则可以使用以下代码获取所选图片的网址:

    var imageId = XmlUtil.GetAttribute("mediaid", XmlUtil.LoadXml(this.Parameters["BackgroundImage"]));
    MediaItem imageItem = Sitecore.Context.Database.GetItem(imageId);
    backgroundImageUrl = MediaManager.GetMediaUrl(imageItem);
    

    如果您的子布局还没有提供 Parameters 属性的基类,您还需要添加以下内容:

    private NameValueCollection parameters;
    public virtual NameValueCollection Parameters
    {
        get
        {
            if (this.parameters == null)
            {
                var parameters = this.Attributes["sc_parameters"];
                this.parameters = string.IsNullOrEmpty(parameters)
                                      ? new NameValueCollection()
                                      : WebUtil.ParseUrlParameters(parameters);
            }
            return this.parameters;
        }
    }
    

    【讨论】:

      【解决方案2】:

      要实现这一点,您必须查看 sitecore 图像字段如何将原始文本值呈现到 img 标记中。但是,这对于 sitecore 来说是开箱即用的,这是有原因的。参数模板旨在定义有关渲染或子布局应如何渲染的信息。例如。您可以使用它来告诉列表控件显示一定数量的项目等。我建议不要对内容使用渲染参数,因为这会使内容编辑变得非常麻烦。如果您的目标是在页面本身以外的地方定义特定子布局的内容,请将其放入子项目中。

      【讨论】:

      • 点了。我应该解释一下,我正在将现有网站转换为 Sitecore。在当前的 CMS 中,用户可以将背景图像添加到站点上的任何结构容器中。总是,图像只在那个地方使用,而不是在其他任何地方使用。所以这就是我决定采用使用渲染参数的方法的原因。
      • 我明白图像是“内容”,不应该是渲染参数。但是,就像在这个例子中一样,我需要为页面编辑器作者提供一种方法来为组件选择背景图像。除了渲染参数,我还应该怎么做?
      【解决方案3】:

      您可以有 2 个单独的函数来检索您提供给子布局的参数模板中图像字段的值。

      第一步:获取与图像参数关联的值。请使用以下函数检索值。

      /// <summary>
      /// Returns a specific parameter value
      /// Use this for Single-line, multiline text fields, linkfield, Image field etc.
      /// </summary>
      /// <param name="parameterName"></param>
      /// <returns></returns>
        public  MediaItem GetValueFromRenderingParameter(string parameterName)
        {
          var item = !string.IsNullOrEmpty(_params[parameterName]) ? _params[parameterName] :        string.Empty;
           if(item == null)
             {
                return null ;
             }
             return Sitecore.Context.Database.GetItem(item);
      
        }
      

      第二步:创建另一个函数,您可以在其中使用上述函数来检索图像字段的值并适当地使用它。这是相同的代码sn-p:

      Public string RenderImage()
       {
         Sitecore.Data.Fields.ImageField imageField =GetValueFromRenderingParameter("Image parameter name");
           return MediaManager.GetMediaUrl(imageField.MediaItem) ;
       }
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-20
        • 1970-01-01
        • 2017-08-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多