1

我尝试使用文档类型 Textpage 上的新属性 showInFooter (True/False) 向 umbraco6 添加一个简单的页脚菜单。

使用以下内容创建 xslt 文件:

    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]>
<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxml="urn:schemas-microsoft-com:xslt"
  xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets"
  exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets ">


<xsl:output method="xml" omit-xml-declaration="yes"/>

<xsl:param name="currentPage"/>

<xsl:template match="/">
<ul>
        <xsl:for-each select="$currentPage/ancestor-or-self::node/descendant-or-self::node/node [string(data[@alias='ShowInFooter']) = '1']">
                <li>                    
                    <a href="{umbraco.library:NiceUrl(@id)}">
                        <xsl:value-of select="@nodeName" />
                    </a>
                </li>
            </xsl:for-each>
</ul>
</xsl:template>

</xsl:stylesheet>

将宏添加到我的母版页:

<umbraco:Macro Alias="mgzFooterNavigation" runat="server"></umbraco:Macro>

而且我显然在页脚菜单中我想要的页面上勾选了 true,但我没有菜单项:-/。

但我只是得到一个空白<ul> </ul>.

4

2 回答 2

0

我无法得到 amelvin 在 Umbraco 6 中工作的答案。这是我的尝试,它适用于我,但可能不适用于我的设置。

<xsl:variable name="allNodes" select="$currentPage/ancestor-or-self::root//umbTextpage[@isDoc]"/>

<xsl:template match="/">

<ul class="footer-menu">
    <xsl:for-each select="$allNodes">
        <xsl:if test="showInFooter = 1"> 
            <li>
            <a href="{umbraco.library:NiceUrl(@id)}">
            <xsl:value-of select="@nodeName"/>
            </a>
            </li>
        </xsl:if>
    </xsl:for-each>
</ul>

</xsl:template>
于 2013-05-30T11:21:45.137 回答
0

如果您有一个空白<ul> </ul>,表明您的 xsl:for-each 不匹配任何内容 - 您可以通过在 for-each 中使用xsl:value-of.

所以我猜你在 for-each 中的选择有一个错误。

两个最可能的错误是您拼错了“ShowInFooter”(它是否有一个首字母小写字母 - Umbraco 通常默认为一个)。

其次,您的页脚节点是否在起作用?

从 Umbraco 的 wiki ( http://en.wikibooks.org/wiki/Umbraco/Various_useful_XSLT_methods_in_Umbraco ) 中,您可以使用它来围绕 home 下的节点运行 (...并且您将 'myDocType' 替换为 home 的文档类型节点假设您的导航都嵌套在主节点下方)

xsl:for-each select="$currentPage/ancestor-or-self::root//node [@nodeTypeAlias='myDocType']"

然后,您可以使用xsl:value-of.

然后使用您的字段值进行扩展,类似于:

<xsl:for-each select="$currentPage/ancestor-or-self::root//node [@nodeTypeAlias='myDocType']">
<xsl:variable name="footerItem" select="node[data[@alias='showInFooter'] = '1'">
<xsl:if test="$footerItem">
  <li>                    
    <a href="{umbraco.library:NiceUrl(@id)}">
      <xsl:value-of select="@nodeName" />
    </a>
  </li>
</xsl:if>
</xsl:for-each>
于 2013-05-18T16:25:28.010 回答