Sitecore - 参数模板中的图像字段

时间:2013-11-06 22:42:01

标签: sitecore

如果我在参数模板中有一个图像字段,那么在c#中获取图像的URL有哪些步骤?

3 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您可以使用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);

  }

第二步:创建另一个函数,您可以使用上面提到的函数来检索图像字段的值并适当地使用它。以下是相同的代码段:

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

希望这有助于。