Como faço para acessar as propriedades do documento principal para o uso em crianças
Pergunta
Eu sou novo para os Dois CMS.Por favor, ajuda.
Eu tenho um Umbraco site em que eu criei um DocumentType chamado de 'Mestre'.O 'Mestre' de página permite que a entrada do usuário um objetivo e um valor de captação de iniciar estão a realizar.O 'Mestre' página eu tiver uma Macro que faz automaticamente o cálculo para gerar um por cento que será usado em todo o site.A Macro chama o XSLT seguinte
<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>
Isso funciona, mas, eu estou supondo, porque é uma 'for-each' é também de volta dois NaN resultados.Como posso reescrever este (a) de limpeza e (b) de forma que ele funciona melhor.
Eu entendo ASP.NET Webforms, então se você poderia comparar com o que ele iria ajudar.
Apreciar a ajuda.
Solução
Em Umbraco você pode ter o que são chamados recursivos de valores.Este são, basicamente, valores de página que procurar o nó de hierarquia até filnds um valor.
Estes podem ser passados para macros bem.
Então, no seu caso, supondo que a macro é chamada de "charityTotaliser", pode utilizar a seguinte macro chamada:
<umbraco:macro alias="charityTotaliser" ammount="[$FundraisingCurrentAmount]" goal="[$FundraisingGoal]"runat="server"/>
O $ indica que o valor é recursiva.
O XSLT seria algo parecido com isto (não testado apenas um exemplo):
<?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>
Se requied você também pode especificar reversão de valores a serem passados (no caso, o recursiva valor não pode ser encontrado):
<umbraco:macro alias="charityTotaliser" ammount="[$FundraisingCurrentAmount], [#FallBackAmmount], 1234" goal="[$FundraisingGoal]"runat="server"/>
Para obter mais informações sobre parâmetros de macro você pode ler este documentação
Outras dicas
Estou familiarizado apenas com o XSLT; portanto, a partir desse ponto de vista, sugiro adicionar uma qualificação para sua instrução para seleção para Eaça. Eu não vi o XML, mas algo como:
<xsl:for-each select="$currentPage/ancestor-or-self::*[FundraisingGoal>0]">
.
.
.
</xsl:for-each>
Ele deve percorrer apenas aqueles que têm um valor de meta que pode ser dividido.
Não tenho certeza se é isso que você procura, mas espero que isso ajude.