-1

私はこの再帰メニューを使用しており、いくつかの変更を加えています。最初のレベルの li タグで必要なのは、一意の番号を持つ ID です。したがって、最初の ID は id="mid0"、2 番目の ID は 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

XSLT ブロック内には、ステートメントに一致する項目の現在のインデックスを提供する、for-each小さな関数が呼び出されます。条件付き属性タグ (レベル 1 アイテムのみ) と組み合わせて、次のコードを追加すると、必要なものが得られます。position()for-each

<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 に答える