Frage

Ich habe eine für jede, die sich um News Knoten Schleifen. Unter anderen Eigenschaften haben diese Nachrichten zwei Attribute für das Erstellungsdatum. System hinzugefügt Datum und ein vom Benutzer eingegebenen Erstellungsdatum (das Systemdatum außer Kraft zu setzen). Ich würde die Liste erstellt Datum mit der Präferenz für den Benutzer eingegebenen Datum sortiert mögen.

Unten ist mein bescheidener Versuch ungültig!

<xsl:for-each select="$currentPage/ancestor-or-self::node /node [@nodeTypeAlias = $documentTypeAlias and string(data [@alias='umbracoNaviHide']) != '1']">

<xsl:choose>
 <xsl:when test="data [@alias = 'createdDate'] != ''">
  <xsl:variable name="sort" select="string(data [@alias = 'createdDate'])"/>
 </xsl:when>
 <xsl:otherwise>
  <xsl:variable name="sort" select="string(@createDate)"/>
 </xsl:otherwise>
</xsl:choose>

<xsl:sort select="$sort" order="descending"/>

Vielen Dank

War es hilfreich?

Lösung

<xsl:sort select="(data[@alias='createdDate' and normalize-space() != '']|@createDate)[last()]" order="descending" />

Diese Anweisung erstellt eine nodeset mit den beiden Knoten mit Datum und erhält die letzte Dokument, um nach der Sortierung zu tun. Wenn Daten Knoten existiert und nicht leer ist, wird es für die Sortierung verwendet werden, da untergeordneten Elemente eines Elements nach seinem Attributknoten auftreten.

concat () kann nur funktionieren, und in einigen Fällen, wenn Sie Text verwenden Sortierung; es wird mit numerischer Sortierung versagen.

Andere Tipps

Richtig, scheint wie ein Hack, aber ich habe dies erreichen, kann durch eine concat mit der Art verwendet wird.

Beispiel unter

<xsl:for-each select="$currentPage/ancestor-or-self::node /node [@nodeTypeAlias = $documentTypeAlias and string(data [@alias='umbracoNaviHide']) != '1']">
<xsl:sort select="concat(data [@alias = 'createdDate'],@createDate)" order="descending"/>

Um zu testen, ob ein Knoten leer ist (oder weggelassen) in XSLT:

<xsl:when test="not(string(name))">...</xsl:when>
<!-- or -->
<xsl:when test="not(name)">...</xsl:when>

Vielen Dank an Erlock für seine Lösung. Ich habe kämpfen für eine Weile diese Arbeit in meiner Version von Umbraco zu bekommen (4.7.1) aufgrund der auf die Umbraco XSLT-Syntax vorgenommenen Änderungen.

Für alle Interessierten, meine Arbeitsprobe würde Erlock den Code ändern werden;

<xsl:sort select="(current()/createdDate[normalize-space() != '']|@createDate)[last()]" order="descending" />
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top