1

我的 Umbraco 项目具有以下结构:

Content
-Home
--Contacts
--Offices
-About

主页有'/'地址,是一个索引页面。有人可以告诉我如何通过 XSLT 获取 Both - Home 和 About 元素以将它们放入菜单中吗?目前我只能按当前页面的级别(即主页)获取子节点,所以我只得到联系人和办公室。我不能通过 documentType 来获取它们,因为我想要一个动态的,而不是硬编码的。有没有办法让 Home 和 About 不断显示在菜单中?我对 XSLT 完全陌生,而且是在 Umbraco 本身的第二天。

编辑:这是 XML 的一部分,在

<xsl:param name="currentPage"/>

<!-- Input the documenttype you want here -->
<xsl:variable name="level" select="1"/>

<xsl:template match="/">

<!-- The fun starts here -->
<ul>
<xsl:for-each select="$currentPage/ancestor-or-self::* [@level=$level]/* [@isDoc and string(umbracoNaviHide) != '1']">
    <xsl:if test="$currentPage/@id = @id">
        <li class="selected">
            <a href="{umbraco.library:NiceUrl(@id)}">
                <xsl:value-of select="@nodeName"/>
            </a>
        </li>
    </xsl:if>
    <xsl:if test="$currentPage/@id != @id">
        <li>
            <a href="{umbraco.library:NiceUrl(@id)}">
                <xsl:value-of select="@nodeName"/>
            </a>
        </li>
    </xsl:if>
    <xsl:value-of select="$currentPage/id"/>
</xsl:for-each>
</ul>

</xsl:template>

Edit2:通过取消水平平等,我得到了“self”,即“Home”,但仍然没有“About”。也许您知道如何找到有关“X-Path”选择器的信息,例如“ancestor-or-self::*”?

4

1 回答 1

4

我终于找到了答案。通过项目根元素访问所有元素的方法是使用“$currentPage/ancestor::root//*”。这就是我的标记现在的样子,在 John 的帮助下,简化了“if”语句。

<!-- Input the documenttype you want here -->
<xsl:variable name="level" select="1"/>

<xsl:template match="/">

<!-- The fun starts here -->
<ul>
    <xsl:for-each select="$currentPage/ancestor::root//*  [@level = $level and name() != 'Home' and @isDoc and string(umbracoNaviHide) != '1']">
        <li>
            <xsl:if test="$currentPage/@id = @id">
                <xsl:attribute name="class">selected</xsl:attribute>
            </xsl:if>
            <a href="{umbraco.library:NiceUrl(@id)}">
                <xsl:value-of select="@nodeName"/>
            </a>
        </li>
    <xsl:value-of select="$currentPage/id"/>
</xsl:for-each>
</ul>

在出口处,我得到了“内容”的所有元素,除了“主页”(我只是不只是在我的菜单中需要它)。

于 2013-11-08T08:46:52.857 回答