我正在制作一个新闻列表,并且直到现在才将新闻排序。新的先来。
但我想给网站管理员一个更灵活的解决方案。这意味着在后端,管理员可以从下拉列表中选择,以他/她想要的方式对列表进行排序。按日期(最新的第一个和最早的第一个),或按标题(A-Z和Z-A)。这意味着4种可能的正确方法。
现在我有以下XSLT:
<xsl:variable name="alleNyheder" select="$currentPage//node" />
<xsl:variable name="sort">
<news>
<xsl:for-each select="$alleNyheder[@template='1092']">
<news>
<id>
<xsl:value-of select="./@id"></xsl:value-of>
</id>
<date>
<xsl:choose>
<xsl:when test="./data[@alias='date'] != ''">
<xsl:value-of select="./data[@alias='date']"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="./@createDate"/>
</xsl:otherwise>
</xsl:choose>
</date>
</news>
</xsl:for-each>
</news>
</xsl:variable>
<xsl:for-each select="msxml:node-set($sort)/news/news">
<xsl:sort data-type="text" select="date" order="descending" />
---- My newsitems ----
</xsl:for-each>
所以当下我在我的变量$ sort中的“date”值之后对我的列表进行排序。
如果我将$ date中的“date”-field更改为title而不是date,我可以在新闻标题之后对列表进行排序。但不幸的是,它应该按升序排序,而不是降序排序。而且我无法弄清楚如何像在select-value中那样动态地更改顺序值。
如果它对任何人有帮助,我正在研究Umbraco CMS。
由于
-Kim
答案 0 :(得分:1)
<xsl:choose>
<xsl:when test="$sortfield = 'date' and $sortorder = 'D'>
<xsl:for-each select="msxml:node-set($sort)/news/news">
<xsl:sort data-type="text" select="date" order="descending" />
<!-- ... -->
</xsl:for-each>
</xsl:when>
<xsl:when test="$sortfield = 'date' and $sortorder = 'A'>
<xsl:for-each select="msxml:node-set($sort)/news/news">
<xsl:sort data-type="text" select="date" order="ascending" />
<!-- ... -->
</xsl:for-each>
</xsl:when>
<!-- ... -->
</xsl:choose>
另外,您应该查看<xsl:apply-templates>
并避免<xsl:for-each>
。您的代码变得更清晰,并且通过这种方式更加惯用。我也确信整个临时node-set()
业务是完全可以避免的。