Wie greife ich auf Eigenschaften des übergeordneten Dokuments zu, um sie in untergeordneten Dokumenten zu verwenden?

StackOverflow https://stackoverflow.com/questions/1683799

  •  18-09-2019
  •  | 
  •  

Frage

Ich bin neu bei Umbraco CMS.Bitte helfen Sie.

Ich habe eine Umbraco-Website, auf der ich einen DocumentType namens „Master“ erstellt habe.Auf der „Master“-Seite können Benutzer ein Ziel und einen Betrag für eine von ihnen durchgeführte Spendenaktion eingeben.Auf der „Master“-Seite habe ich ein Makro, das automatisch die Berechnung durchführt, um einen Prozentsatz zu generieren, der auf der gesamten Website verwendet wird.Das Makro ruft das folgende XSLT auf

 <xsl:for-each select="$currentPage/ancestor-or-self::*">
  <xsl:variable name="amount" select="* [@alias = 'FundraisingCurrentAmount']"/>
  <xsl:variable name="goal" select="* [@alias = 'FundraisingGoal']"/>
  <xsl:variable name="percentage" select="$amount div $goal * 100"/>
  <xsl:value-of select="$percentage"/>
 </xsl:for-each>

Das funktioniert, aber ich gehe davon aus, dass es auch zwei NaN-Ergebnisse zurückgibt, da es sich um ein „Für-jedes“ handelt.Wie kann ich das (a) sauberer und (b) so umschreiben, dass es besser funktioniert?

Ich verstehe ASP.NET Webforms. Ein Vergleich damit wäre hilfreich.

Schätzen Sie die Hilfe.

War es hilfreich?

Lösung

In Umbraco können Sie sogenannte rekursive Werte haben.Hierbei handelt es sich grundsätzlich um Seitenwerte, die die Knotenhierarchie durchsuchen, bis ein Wert gefunden wird.

Diese können auch an Makros übergeben werden.

Wenn Sie also in Ihrem Fall davon ausgehen, dass Ihr Makro „charityTotaliser“ heißt, könnten Sie den folgenden Makroaufruf verwenden:

<umbraco:macro alias="charityTotaliser" ammount="[$FundraisingCurrentAmount]" goal="[$FundraisingGoal]"runat="server"/>

Das $ gibt an, dass der Wert rekursiv ist.

Das XSLT würde etwa so aussehen (nicht getestet, nur ein Beispiel):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:Stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]>
<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxml="urn:schemas-microsoft-com:xslt"
    xmlns:umbraco.library="urn:umbraco.library"
    xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath"
    exclude-result-prefixes="msxml umbraco.library Exslt.ExsltMath">

    <xsl:output method="xml" omit-xml-declaration="yes"/>

    <xsl:param name="currentPage"/>

    <!-- Macro parameters -->
    <xsl:variable name="FundraisingCurrentAmount" select="/macro/FundraisingCurrentAmount"/>
    <xsl:variable name="FundraisingGoal" select="/macro/FundraisingGoal"/>

    <xsl:template match="/">

        <xsl:value-of select="$FundraisingCurrentAmount div $FundraisingGoal * 100"/>

    </xsl:template>

</xsl:stylesheet>

Bei Bedarf können Sie auch zu übergebende Fallback-Werte angeben (falls der rekursive Wert nicht gefunden werden kann):

<umbraco:macro alias="charityTotaliser" ammount="[$FundraisingCurrentAmount], [#FallBackAmmount], 1234" goal="[$FundraisingGoal]"runat="server"/>

Weitere Informationen zu Makroparametern finden Sie hier Dokumentation

Andere Tipps

Ich bin nur mit XSLT vertraut. Von diesem Standpunkt aus empfehle ich daher, eine Qualifikation für Ihre For-Each-Auswahlanweisung hinzuzufügen. Ich habe die XML nicht gesehen, aber so etwas wie:

<xsl:for-each select="$currentPage/ancestor-or-self::*[FundraisingGoal>0]">
.
.
.
</xsl:for-each>

Es sollte nur durch diejenigen gehen, die eine Zielbetrag haben, von der durch die geteilt werden kann.

Ich bin mir nicht sicher, ob Sie danach suchen, aber ich hoffe, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top