Domanda

Sono nuovo di Umbraco CMS. Si prega di aiutare.

Ho un sito web Umbraco in cui ho creato un DocumentType chiamato 'Maestro'. La pagina di 'Master' permette l'input dell'utente un obiettivo e la quantità per una raccolta di fondi avviare stanno intraprendendo. Nella pagina 'Master' Ho una macro che fa automaticamente la matematica per generare una percentuale che verrà utilizzato in tutto il sito. La macro chiama il seguente XSLT

 <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>

Questo funziona, ma, io parto dal presupposto perché è un 'for-each' è anche tornando due NaN risultati. Come posso riscrivere questo (a) più pulito e (b) in modo che funzioni meglio.

Capisco ASP.NET Webforms quindi se si potrebbe paragonare a quello che sarebbe dare una mano.

Apprezzare l'aiuto.

È stato utile?

Soluzione

In Umbraco si può avere ciò che sono chiamati valori ricorsive. Questo è fondamentalmente valori di pagina che guardano la gerarchia del nodo fino a quando non filnds un valore.

Questi possono essere passati alle macro pure.

Quindi nel tuo caso supponendo che il macro si chiama "charityTotaliser", è possibile utilizzare la seguente chiamata di macro:

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

Il $ indica che il valore è ricorsiva.

Il XSLT sarebbe simile a questa (non testato solo un esempio):

<?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>

Se requied è inoltre possibile specificare i valori di posizionamento di sicurezza per essere passato (nel caso in cui il valore ricorsivo non può essere trovato):

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

Per ulteriori informazioni sui parametri macro si può leggere questo documentazione

Altri suggerimenti

Sono solo familiarità con XSLT, in modo da questo punto di vista vi suggerisco di aggiungere una qualificazione per la vostra for-each select. Non ho visto l'XML ma qualcosa di simile:

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

Si deve camminare solo attraverso quelli che hanno una quantità obiettivo che può essere diviso per.

Non sono sicuro se questo è ciò che siete dopo, ma spero che questo aiuta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top