2014-11-06 3 views
0

У меня есть XSL-макрос, который выглядит так: Тот же макрос должен вызываться из двух разных мест, только differenc находится в каждом из sellect, где «quickLinksUrls1» или «quickLinksUrls2» должны быть называется. Я думал о том, чтобы отправить это как переменную, но не знаю, как использовать этот параметр для каждого.Umbraco XSLT для каждого цикла с переменным

Как достичь этого без создания двух разных макросов с почти идентичными петлями 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> 

ответ

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 & 2, вы могли бы использовать <xsl:if> insinde в template или даже в атрибуте match.

В общем, следует использовать шаблон шаблона и ограничивать использование for-each в простых случаях. Это хороший трюк, чтобы иметь в виду, имхо.

Смежные вопросы