Как получить доступ к свойствам от родительского документа для использования у детей
Вопрос
Я новичок в 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>
Это работает, но я предполагаю, потому что это «за то, что он» также возвращает два результата NAN. Как я могу переписать это (а) чище и (б), чтобы это работало лучше.
Я понимаю Webforms ASP.NET, чтобы, если бы вы могли сравнить с этим, это поможет.
Ценю помощь.
Решение
В Umbraco вы можете иметь то, что называется рекурсивными ценностями. Это в основном значения страниц, которые смотрят на иерахию узела, пока она не наполнит значение.
Они также могут быть переданы в макросы.
Таким образом, в вашем случае, если предположить, что ваш макрос называется «благотворительным тарифом», вы можете использовать следующий вызов макроса:
<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>
Он должен пройти только те, у кого есть сумма цели, которую можно разделить.
Не уверен, что это то, что вы хотите, но я надеюсь, что это поможет.