3

UmbracoCMSは初めてです。助けてください。

'Master'というDocumentTypeを作成したUmbracoのWebサイトがあります。「マスター」ページでは、ユーザーが実施している資金調達開始の目標と金額を入力できます。「マスター」ページには、サイト全体で使用されるパーセントを生成するために自動的に計算を行うマクロがあります。マクロは次の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>

これは機能しますが、「for-each」であるため、2つのNaN結果も返すと思います。これを(a)クリーナーと(b)より良く機能するように書き直すにはどうすればよいですか?

ASP.NET Webフォームを理解しているので、それと比較できれば役に立ちます。

ヘルプに感謝します。

4

2 に答える 2

4

Umbracoでは、再帰値と呼ばれるものを使用できます。これは基本的に、値を見つけるまでノード階層を検索するページ値です。

これらはマクロにも渡すことができます。

したがって、マクロの名前が「charityTotaliser」であると仮定すると、次のマクロ呼び出しを使用できます。

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

$は、値が再帰的であることを示します。

XSLTは次のようになります(単なる例ではありません)。

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

必要に応じて、渡すフォールバック値を指定することもできます(再帰値が見つからない場合)。

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

マクロパラメータの詳細については、このドキュメントをお読みください。

于 2009-11-06T10:56:32.170 に答える
1

私はXSLTに精通しているだけなので、その観点から、for-eachselectステートメントに資格を追加することをお勧めします。XMLは見たことがありませんが、次のようなものです。

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

で割ることができる目標量を持っているものだけを歩く必要があります。

これがあなたが求めているものかどうかはわかりませんが、これがお役に立てば幸いです。

于 2009-11-05T21:50:46.167 に答える