子供で使用するために親文書からプロパティにアクセスするにはどうすればよいですか
質問
私はUmbraco CMSに慣れています。助けてください。
umbracoのウェブサイトがあり、「マスター」と呼ばれるdocumentTypeを作成しました。 「マスター」ページを使用すると、ユーザーが目標と金額を入力できます。 「マスター」ページには、サイト全体で使用されるパーセントを生成するために数学を自動的に行うマクロがあります。マクロは、次の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-for-for-for」であるため、2つのNANの結果を返していると仮定しています。これを(a)クリーナーと(b)より良く動作させる方法を書き直すにはどうすればよいですか。
私はASP.NET WebFormsを理解しているので、もしあなたがそれと比較できるなら、それは助けてくれるでしょう。
助けに感謝します。
解決
Umbracoでは、再帰値と呼ばれるものを持つことができます。これは基本的に、値をfilndするまでノードを検索するページ値です。
これらはマクロにも渡すことができます。
したがって、あなたのマクロが「CharityTotaliser」と呼ばれると仮定した場合、次のマクロ呼び出しを使用できます。
<umbraco:macro alias="charityTotaliser" ammount="[$FundraisingCurrentAmount]" goal="[$FundraisingGoal]"runat="server"/>
$は、値が再帰的であることを示します。
XSLTは次のようになります(例としてテストされていません):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:Stylesheet [ <!ENTITY nbsp " "> ]>
<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"/>
マクロパラメーターの詳細については、これを読むことができます ドキュメンテーション
他のヒント
私はXSLTのみに精通しているので、その観点からは、あなたの選択したステートメントの資格を追加することをお勧めします。 XMLを見たことがありませんが、次のようなもの
<xsl:for-each select="$currentPage/ancestor-or-self::*[FundraisingGoal>0]">
.
.
.
</xsl:for-each>
分割できる目標額を持つもののみを通り抜ける必要があります。
これがあなたが望んでいるかどうかはわかりませんが、これが役立つことを願っています。