Sitecore - Image field in parameter template

2019-04-23 19:59发布

问题:

If I have an image field in a parameter template, what are the steps involved in getting the URL of the image in c#?

回答1:

@mdresser makes a valid point about what should and should not be a rendering parameter. However, I don't think that Sitecore intentionally made it difficult to use image fields in parameter templates. They simply built the parameter template functionality over the existing key-value pair rendering parameter functionality.

If the name of your image field on the rendering parameters template was BackgroundImage, you could use the following code to get the URL of the selected image:

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

If you don't already have a base class for your sublayouts that provides the Parameters property, you will need to also add this:

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:

To achieve this you would have to look at how the sitecore image field renders the raw text value into an img tag. However, there is a reason that this doesn't work out of the box with sitecore; parameters templates are designed to define info about how a rendering or sublayout should render. E.g. You could use it to tell a list control to show a certain number of items etc. I'd advise against using rendering parameters for content as this will make content editing very cumbersome. If your aim is to have the content of a particular sublayout defined somewhere other than the page itself, put it into a sub item instead.



回答3:

You can have a 2 separate functions to retrieve the value of image field in the parameter template that you gave to the sub layout .

First Step : Get the value associated with the parameter of image . Please use below function to retrieve the value .

/// <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);

  }

Second step : Create another function where you can use the above mentioned function to retrieve the value of image field and use it appropriately. Here is the code snippet of the same :

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

Hope This Helps .



标签: sitecore