Как получить доступ к свойствам от родительского документа для использования у детей

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

  •  18-09-2019
  •  | 
  •  

Вопрос

Я новичок в 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 "&#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"/>

Для получения дополнительной информации о макро -параметрах вы можете прочитать это документация

Другие советы

Я знаком только с XSLT, поэтому с этой точки зрения я предлагаю добавить квалификацию для вашего оператора для выбора. Я не видел XML, но что -то вроде:

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

Он должен пройти только те, у кого есть сумма цели, которую можно разделить.

Не уверен, что это то, что вы хотите, но я надеюсь, что это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top