问题描述
||
好的,这是我的xslt,用于遍历主页项的各项,但是我希望能够遍历模板...这样做的原因是,我的xslt可以更具体,而不是显示家居用品
<xsl:template match=\"*\" mode=\"main\">
<div id=\"aside\">
<ul id=\"nav\">
<xsl:for-each select=\"$home/descendant-or-self::item[position() <= 6]\">
<li>
<sc:link>
<sc:text field=\"Title\"></sc:text>
</sc:link>
</li>
</xsl:for-each>
</ul>
<div class=\"advertisement\">
<sc:image field=\"Image\"></sc:image>
</div>
</div>
</xsl:template>
解决方法
从您的xslt看来,您正在谈论导航。与其遍历不同的模板,我将创建一个仅包含一个名为ShowInNavigation的字段的特定导航模板。
然后,所有其他模板将继承此模板,并且导航xslt将变得更简单
<xsl:template match=\"*\" mode=\"main\">
<div id=\"aside\">
<ul id=\"nav\">
<xsl:for-each select=\"$home/descendant-or-self::item[sc:fld(\'ShowInNavigation\') = \'1\']\">
<li>
<sc:link>
<sc:text field=\"Title\"></sc:text>
</sc:link>
</li>
</xsl:for-each>
</ul>
<div class=\"advertisement\">
<sc:image field=\"Image\"></sc:image>
</div>
</div>
</xsl:template>
另外,请勿在导航中使用“后代或自身::”项目,因为随着站点的增长,导航将成为您的瓶颈。
最好使用$ home / item [sc:fld(\'ShowInNavigation \')= \'1 \'],然后对上面的home节点进行硬编码。因此,xslt将变为:
<xsl:template match=\"*\" mode=\"main\">
<div id=\"aside\">
<ul id=\"nav\">
<li>
<sc:link select=\"$home\">
<sc:text field=\"Title\"></sc:text>
</sc:link>
</li>
<xsl:for-each select=\"$home/item[sc:fld(\'ShowInNavigation\') = \'1\']\">
<li>
<sc:link>
<sc:text field=\"Title\"></sc:text>
</sc:link>
</li>
</xsl:for-each>
</ul>
<div class=\"advertisement\">
<sc:image field=\"Image\"></sc:image>
</div>
</div>
</xsl:template>