Umbraco XSLT for-每个循环与变量

Umbraco XSLT for-每个循环与变量

问题描述:

我有一个XSL宏看起来像这样: 同一个宏应该从2个不同的地方调用只差异是在for-each sellect其中“quickLinksUrls1”或“quickLinksUrls2”应该是调用。 我在考虑将它作为变量发送,但不知道如何在每个变量中使用此参数。Umbraco XSLT for-每个循环与变量

如何实现这个没有使两个不同的宏几乎相同的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> 

你应该已经显示了一些你的输入文件,更容易误解。 无论如何,我会试着猜你正在尝试做什么。

只需使用模板匹配模式而不是<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 & 2之间的模板的身体,你可以使用一个<xsl:if> insinde的template甚至在match属性。

通常,您应该更喜欢使用模板模式并将for-each的用法限制为简单情况。要记住,这是一个很好的窍门,恕我直言。