Umbraco XSLT for-each循环变量

时间:2014-11-06 15:30:11

标签: variables xslt parameters umbraco

我有一个XSL宏看起来像这样: 应该从2个不同的地方调用相同的宏,只有在每个选择中,应该调用“quickLinksUrls1”或“quickLinksUrls2”。 我正在考虑将其作为变量发送,但不知道如何在for each中使用此参数。

如何在不制作具有几乎相同的foreach循环的两个不同宏的情况下实现此目的?

<xsl:param name="currentPage"/>
<xsl:param name="quickLinksGroup" select="/macro/quickLinksGroup"/>

<xsl:template match="/">

    <xsl:for-each select="$currentPage/ancestor-or-self::*/Home/quickLinksUrls1/multi-url-picker/*">
        <xsl:variable name="nodeId" select="node-id"/>
        <xsl:variable name="linkTitle" select="link-title"/>

        <xsl:if test="number($nodeId) &gt; 0">
        </xsl:if>
    </xsl:for-each>

</xsl:template>

1 个答案:

答案 0 :(得分:0)

您应该已经显示了一些输入文件,更容易误解。 无论如何,我会猜测你想要做什么。

只需使用模板匹配模式而不是<xsl:for-each>

<xsl:template match="/">    
    <xsl:apply-templates select="$currentPage/ancestor-or-self::*/Home/*[name()= 'quickLinksUrl1' or name()='quickLinksUrl2']/multi-url-picker/*"/>    
</xsl:template>

<xsl:template match="*">
        <!-- The content of your initial "for-each" statement -->
        ...
</xsl:template>

如果您需要在quickLinksUrl1&amp; 2之间区分模板主体,则可以使用<xsl:if>隐藏template甚至match属性。

通常,人们应该更喜欢使用模板模式,并将for-each的用法限制为简单的情况。这是一个很好的诀窍,请记住,imho。