【发布时间】:2013-11-06 22:42:00
【问题描述】:
如果我在参数模板中有图片字段,在c#中获取图片的URL涉及哪些步骤?
【问题讨论】:
标签: sitecore
如果我在参数模板中有图片字段,在c#中获取图片的URL涉及哪些步骤?
【问题讨论】:
标签: sitecore
@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;
}
}
【讨论】:
要实现这一点,您必须查看 sitecore 图像字段如何将原始文本值呈现到 img 标记中。但是,这对于 sitecore 来说是开箱即用的,这是有原因的。参数模板旨在定义有关渲染或子布局应如何渲染的信息。例如。您可以使用它来告诉列表控件显示一定数量的项目等。我建议不要对内容使用渲染参数,因为这会使内容编辑变得非常麻烦。如果您的目标是在页面本身以外的地方定义特定子布局的内容,请将其放入子项目中。
【讨论】:
您可以有 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) ;
}
希望这会有所帮助。
【讨论】: