-1

我正在使用这个递归菜单,并做了一些改动。我在第一级 li 标签上想要的是一个具有唯一编号的 id。所以第一个的 id 是 id="mid0",第二个是 id="mid1" 等等。如何才能做到这一点?

我是 XSLT 的新手,所以请原谅我问了一个可能很愚蠢的问题,但我已经尝试搜索它,但找不到我要找的东西。

<xsl:if test="count($currentPage/ancestor::root/* [@level=$level]/* [@isDoc and string(umbracoNaviHide) != '1']) &gt; '0'">
<xsl:for-each select="$currentPage/ancestor::root/* [@level=$level]/* [@isDoc and string(umbracoNaviHide) != '1']">
<li class="twocol">
<a href="{umbraco.library:NiceUrl(@id)}">
<xsl:if test="$currentPage/@id = current()/@id">
<xsl:attribute name="class">Selected</xsl:attribute>
</xsl:if>
<xsl:value-of select="@nodeName"/>
</a>
<xsl:if test="count(current()/* [@isDoc and string(umbracoNaviHide) != '1']) &gt; '0'">
<xsl:call-template name="submenu">
<xsl:with-param name="level" select="$level+1"/>
</xsl:call-template>
</xsl:if>
</li>
</xsl:for-each>
</xsl:if>

具有类“twocol”的 li 是我需要 id 的地方,因此它在输出中最终如下所示:

<li id="mid0" class="twocol">
<li id="mid1" class="twocol">
4

1 回答 1

1

在 XSLTfor-each块中,有一个很好的小函数被调用position(),它将为您提供与for-each语句匹配的项目的当前索引。结合条件属性标签(仅适用于 1 级项目),添加以下代码应该可以满足您的需求:

<xsl:for-each select="$currentPage/ancestor::root/* [@level=$level]/* [@isDoc and string(umbracoNaviHide) != '1']">
    <li class="twocol">

        <!-- NEW CODE -->
        <xsl:if test="$level = 1">
            <xsl:attribute name="id">mid<xsl:value-of select="position()-1" /></xsl:attribute>
        </xsl:if>
        <!-- / NEW CODE -->

        <a href="{umbraco.library:NiceUrl(@id)}">
            <xsl:if test="$currentPage/@id = current()/@id">
                <xsl:attribute name="class">Selected</xsl:attribute>
            </xsl:if>
于 2012-06-28T12:35:53.107 回答