2012-03-01 40 views
0

我对xsl并不是很熟悉,所以尽管如此,我还是有点磕磕绊绊。XSL使用Sitecore排序

我的xsl文件正在建立一个菜单。我正尝试通过Sitecore中菜单标题字段中的值对菜单项进行排序。当我运行代码时,它不排序。它只是四次写出每个菜单项。

任何人都可以阐明我失踪的东西吗?

<xsl:template name="show-title"> 
    <xsl:param name="root" /> 
    <xsl:for-each select="$sc_currentitem/item"> 
     <xsl:sort select="sc:fld('menu title',.)" order="ascending"/> 
     <xsl:choose> 
      <xsl:when test="sc:fld('menu title',$root)!=''"> 
       <sc:text field="menu title" select="$root" /> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:value-of select="$root/@name" /> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:for-each> 
</xsl:template> 

编辑:下面是数据,上面的代码被生成 示例输出:

  • 03/05/201203/05/201203/05/201203/05/2012
  • 03/01/201203/01/2012
  • 03/08/201203/08/201203/08/201203/08/2012
  • 03/02/201203/02/201203/02/201203/02/2012
  • 03/07/201203/07/201203/07/201203/07/2012

我试图让它产生如下:

  • 03/01/2012
  • 03/02/2012
  • 03/05/2012
  • 03/07/2012
  • 03/08/2012

谢谢!

+0

样品输入XML,也作为此模板被调用将真正帮助 – Kevan 2012-03-01 20:21:46

+0

这是我的问题的一部分内容。我不确定我在处理什么。我基本上只是想弄清楚如何排序日期('菜单标题')。当我尝试将sc_currentitem/item添加到for-each标签时,它会导致数据出现多次,每个菜单项。日期应该只出现一次而不是重复。 – crjunk 2012-03-01 20:45:23

回答

0

一定的价值这个名单只是一部分它看起来像你试图从错误的节点读取菜单标题字段。您应该从上下文节点读取它 - > < -

试试这个

<xsl:template name="show-title"> 
    <xsl:param name="root" /> 
    <xsl:for-each select="$sc_currentitem/item"> 
     <xsl:sort select="sc:fld('menu title',.)" order="ascending"/> 
     <xsl:choose> 
      <xsl:when test="sc:fld('menu title',$root)!=''"> 
       <sc:text field="menu title" select="." /> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:value-of select="./@name" /> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:for-each> 
</xsl:template> 
0

这只是一个猜测,你真的不为任何人做更多的猜测,但提供足够的信息....

在您的for-each你指的是$根如<xsl:value-of select="$root/@name" />

我猜测,在$根参数包含某种形式的列表,你应该选择基于来自电流,每个上下文