Comment puis-je accéder aux propriétés du document parent à utiliser chez les enfants

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

  •  18-09-2019
  •  | 
  •  

Question

Je suis nouveau à Umbraco CMS. Il vous plaît aider.

J'ai un site Umbraco où j'ai créé un DocumentType appelé « Maître ». La page « Master » permet de saisir l'utilisateur un but et un montant pour la collecte de fonds Initier qu'ils entreprennent. Sur la page « Master » J'ai une macro qui fait automatiquement le calcul pour générer un pour cent qui sera utilisé sur le site. La macro appelle le XSLT suivant

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

Cela fonctionne, mais je suppose parce qu'il est un « for-each », il revient également deux résultats NaN. Comment puis-je réécrire ce (a) plus propre et (b) pour qu'il fonctionne mieux.

Je comprends ASP.NET WebForms donc si vous pouvez comparer que ce serait aider.

Appréciez l'aide.

Était-ce utile?

La solution

Dans Umbraco vous pouvez avoir ce qu'on appelle des valeurs récursives. Ce sont essentiellement des valeurs de pages concernant le nœud hierachy jusqu'à ce qu'il filnds une valeur.

Ceux-ci peuvent être transmises à des macros ainsi.

Donc dans votre cas en supposant que votre macro est appelée « charityTotaliser » vous pouvez utiliser l'appel de macro suivant:

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

Le $ indique que la valeur est récursive.

Le XSLT ressemblerait à quelque chose comme ça (pas testé juste un exemple):

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

Si requied vous pouvez également spécifier les valeurs de repli à passer (dans le cas où la valeur récursif ne peut être trouvée):

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

Pour plus d'informations sur les paramètres macro vous pouvez lire ceci documentation

Autres conseils

Je ne suis familier avec XSLT, donc de ce point de vue, je suggère d'ajouter une qualification pour votre entreprise à chaque instruction select. Je ne l'ai pas vu le XML, mais quelque chose comme:

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

Il ne doit marcher à travers ceux qui ont un montant objectif qui peut être divisé par.

Je ne sais pas si c'est ce que vous recherchez, mais j'espère que cela aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top