我尝试在文档类型Textpage上使用新属性showInFooter(True / False)向umbraco6添加一个简单的页脚菜单。
使用以下内容创建xslt文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
<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>.
答案 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>