我是Umbraco CMS的新手。请帮助。
我有一个Umbraco网站,我在其中创建了一个名为“Master”的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-each',它也会返回两个NaN结果。如何重写这个(a)清洁剂和(b)以使其更好地工作。
我理解ASP.NET Webforms,所以如果你可以比较它的帮助。
感谢帮助。
答案 0 :(得分: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 " "> ]>
<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"/>
有关宏参数的更多信息,请阅读此documentation
答案 1 :(得分:1)
我只熟悉XSLT,所以从这个角度来看,我建议为你的for-each select语句添加一个资格。我还没有看到XML,但有类似的东西:
<xsl:for-each select="$currentPage/ancestor-or-self::*[FundraisingGoal>0]">
.
.
.
</xsl:for-each>
它应该只遍历具有可以除以的目标数量的那些。
不确定这是不是你想要的,但我希望这有帮助。