2013-05-17 55 views
1

我試過在doc類型的Textpage上使用新屬性showInFooter(True/False)向umbraco6添加一個簡單的頁腳菜單。Umbraco:頁腳菜單真/假屬性

創建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>.

回答

0

如果你有一個空白<ul> </ul>這意味着你的xsl:for-每個不匹配任何東西 - 你可以通過只換每個使用xsl:value-of內輸出任何測試這個。

所以我猜你在for-each中選擇了一個bug。

兩個最可能的錯誤是你拼錯'ShowInFooter'(它是否有一個小寫字母 - Umbraco通常默認爲1)。

其次是你的頁腳節點在玩嗎?

從Umbraco的wiki(http://en.wikibooks.org/wiki/Umbraco/Various_useful_XSLT_methods_in_Umbraco)開始,您將使用它來遍歷家中的節點(...並且假設您的導航欄都嵌套在家中,您將用主節點的文檔類型替換'myDocType'節點)

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> 
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>