Umbraco:页脚菜单真/假属性

时间:2013-05-17 15:06:20

标签: menu umbraco footer

我尝试在文档类型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>

我显然在页脚菜单中的页面上输入了真实内容,但我没有菜单项: - /。

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

2 个答案:

答案 0 :(得分:0)

如果您的空白<ul> </ul>表示您的xsl:for-each不匹配任何内容 - 您可以通过使用xsl:value-of输出for-each中的任何内容来测试此内容。

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

两个最有可能的错误是你错误拼写了ShowInFooter&#39; (它是否有一个初始小写字母--Umbraco通常默认为1)。

其次是你的页脚节点还在玩吗?

来自Umbraco的维基(http://en.wikibooks.org/wiki/Umbraco/Various_useful_XSLT_methods_in_Umbraco),您可以使用它围绕家中的节点运行(...并且您将替换“myDocType”&#39;使用home节点的doctype,假设你的nav全部嵌套在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>

答案 1 :(得分: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>