1

是否有任何扩展方法可用于 Sitecore XSLT 渲染以帮助显示 NameValueList 字段类型(它们的值),或者我是否需要为此操作创建自己的扩展方法?

4

1 回答 1

2

没有用于显示来自 NameValueList 字段的数据的内置扩展方法。只有真正喜欢的才会开箱即用。

您可以使用类似的东西构建自己的。为自定义渲染代码创建一个新类。

namespace Sitecore7.Custom
{
    public class XslExtensions : Sitecore.Xml.Xsl.XslHelper
    {
        public string RenderNameValueList(string fieldName)
        {
            Item item = Sitecore.Context.Item;
            if (item == null)
            {
                return string.Empty;
            }
            List<string> entries = new List<string>(item[fieldName].Split('&'));
            string rendering = string.Empty;
            if (entries.Count > 0)
            {
                rendering += "<table>";
                foreach (string entry in entries)
                {
                    if (entry.Contains("="))
                    {
                        string name = entry.Split('=')[0];
                        string value = entry.Split('=')[1];
                        rendering += "<tr><td>" + name
                          + "</td><td>" + value + "</td></tr>";
                    }
                }
                rendering += "</table>";
            }
            return rendering;
        }
    }
}

然后,您需要在配置文件中添加对它的引用。如果您还没有示例,请在 /App_Config/Include/XslExtension.config 编辑示例。

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <xslExtensions>
      <extension mode="on" type="Sitecore7.Custom.XslExtensions, Sitecore7"
        namespace="http://www.sitecore.net/sce" singleInstance="true"/>
    </xslExtensions>
  </sitecore>
</configuration>

然后在 XSLT 文档顶部的样式表部分,添加如下内容:

xmlns:sce="http://www.sitecore.net/sce"

...并在 exclude-result-prefixes 参数中包含“sce”。

现在您终于可以在渲染中引用该方法了:

Named value pair rendering here:<br />
      <xsl:value-of select="sce:RenderNameValueList('MyFieldName')"
        disable-output-escaping="yes"/>

这可以在很多方面得到改进,但应该让你开始。

于 2013-09-20T22:04:17.640 回答