Bonjour à tous !
J'ai une série de template qui appellent un test avec des paramètres :
Si je met le test dans le template, cela fonctionne parfaitement :
Fort de cela, et vu que je dois appliquer cela à des centaines de templates différents, j'ai donc décidé de remplacer le test écrit directement dans le template par un classique call-template en passant le paramètre id utilisé dans mes tests de variable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <xsl:template match="/livre" mode="livres_bib_A"> <xsl:variable name="id" select="Index"/> <xsl:variable name="vCond" select="/path1/path2/[Index=$id]/path3/v=1"/> <xsl:variable name="path" select="/path1/path2[$vCond] | /path1/path2/path3/path4[not($vCond)]"/> [pleins de XSL utilisant la variable $path] </xsl:template>
Donc :
et donc le template appelé correspondant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <xsl:template match="/livre" mode="livres_bib_A"> <xsl:call-template name="templatecondition"> <xsl:with-param name="id" select="Index"/> </xsl:call-template> [pleins de XSL utilisant la variable $path] </xsl:template>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <xsl:template name="templatecondition"> <xsl:param name="id"/> <xsl:variable name="vCond" select="/path1/path2/[Index=$id]/path3/v=1"/> <xsl:variable name="path" select="/path1/path2[$vCond] | /path1/path2/path3/path4[not($vCond)]"/> </xsl:template>
et là... ca ne fonctionne pas ! enfin quelque soit la valeur de v, je suis toujours dans le cas de [not($vCond)].
Je suspecte bien une histoire de portée de variable, mais dans ce cas là je ne vois pas pourquoi la portée changerait (entre directement dans le template et passée par le call-template)
Je suis preneur de quelques éclaircissements dans le concept
Merci
Partager