1

Umbracoにコンテンツツリーがあり、3つのメインページとそのサブページがあります。ホームページの子である他の5つのページもあり、2つのオプションが設定されています。umbIsChildOfHomePage=1およびumbracoNaviHide=1構造を見てください。 ここに画像の説明を入力してください

次に、ページごとにumb2ndLevelNavigationを生成します。

これはxsltファイルにあります

<xsl:variable name="items" select="$currentPage/ancestor-or-self::* [@isDoc and @level = 2]/* [@isDoc and string(umbracoNaviHide) != '1']"/>
    <xsl:if test="count($items) &gt; 0">
        <ul>
            <xsl:for-each select="$items">
                <li>
                    <xsl:if test="position() = last()">
                        <xsl:attribute name="class">last</xsl:attribute>
                    </xsl:if>
                    <xsl:if test="position() = 1">
                        <xsl:attribute name="class">first</xsl:attribute>
                    </xsl:if>
                    <a href="{umbraco.library:NiceUrl(@id)}">
                        <xsl:value-of select="@nodeName"/>
                    </a>
                </li>
            </xsl:for-each>
        </ul>
    </xsl:if>

これは、ホームページ以外のページでのみ機能します。したがって、xsltselectをさらにパーソナライズする必要があります。それ、どうやったら出来るの?これが私が試したものです。他の選択で条件を追加する方法がわからないため、テンプレートに追加しました。

<xsl:variable name="itemsHomepage" select="$currentPage/ancestor-or-self::* [@isDoc and @level = 1]/* [@isDoc and string(umbracoNaviHide) = '1' and string(umbIsChildOfHomePage) = 1]"/>
    <xsl:if test="count($itemsHomepage) &gt; 0">
        <ul>
            <!--<xsl:attribute name="class">
               a<xsl:value-of select="$currentPage/parent::*[@isDoc]/@id [string(umbIsChildOfHomePage) = 1 ]" />
            </xsl:attribute>-->
            <xsl:for-each select="$itemsHomepage">
                <li>
                    <xsl:if test="position() = last()">
                        <xsl:attribute name="class">last</xsl:attribute>
                    </xsl:if>
                    <xsl:if test="position() = 1">
                        <xsl:attribute name="class">first</xsl:attribute>
                    </xsl:if>
                    <xsl:choose>
                        <xsl:when test="name() = 'Link'">
                            <a href="{current()/linkUrl}" target="_blank">
                                <xsl:value-of select="@nodeName" />
                            </a>

                        </xsl:when>
                        <xsl:otherwise>
                            <a href="{umbraco.library:NiceUrl(@id)}">
                                <xsl:value-of select="@nodeName" />
                            </a>
                        </xsl:otherwise>
                    </xsl:choose>
                </li>
            </xsl:for-each>
            <!--<li>
                s:<xsl:value-of select="$currentPage/@id" />
                <xsl:value-of select="$RootNode/@nodeName"/>-<xsl:value-of select="$RootNode/@id"/>
            </li>-->
        </ul>
    </xsl:if>

問題は、子供がいないページに行っても、子供がいないページでもホームページのアイテムが表示されることです。これらの2つのパラメーター(showNaviとisHomePageChild)がtrueに設定されているページのみを表示するようにselectをパーソナライズするにはどうすればよいですか?ご協力いただきありがとうございます。あなたが問題を理解したことを望みます。

4

1 に答える 1

1

最初のコードは、ノードを上から下のレベル '2' までターゲットにしています。これは、必要なものに対して正しいように聞こえます。レンダリングする必要があるだけです。

あなたがやろうとしていることの良い例がここにあります。

そのソリューションを取り除いて ($level が 2 に設定されている)、xslt に二度と近づかない理由を思い出す!:

<xsl:for-each select="$currentPage/ancestor-or-self::* [@level=$level]/* [@isDoc and string(umbracoNaviHide) != '1']">
<xsl:if test="$currentPage/@id = current()/@id or $currentPage/../@id = current()/@id or $currentPage/../../@id = current()/@id">

...

<ul>
<!-- 1st navigation items -->
<xsl:for-each select="./child::* [@isDoc and string(umbracoNaviHide) != '1']">
<xsl:if test="$currentPage/ancestor-or-self::node/@id = current()/@id"></xsl:if>
<li> .... </li>

<!--output 2nd level nevigation items -->
<xsl:if test="count(current()/child::* [@isDoc]) &gt; 0 and $currentPage/@id = current()/@id or $currentPage/../@id = current()/@id or $currentPage/../../@id = 
current()/@id">

<ul>
<!--output 3rd level nevigation items -->
<xsl:for-each select="./child::* [@isDoc and string(umbracoNaviHide) != '1']">
<xsl:if test="$currentPage/ancestor-or-self::node/@id = current()/@id"></xsl:if>
<li> ... </li>

等々...

于 2012-08-02T11:27:22.487 に答える