2013-02-19 51 views
6

我正在研究DotNetNuke的DDR樹狀目錄菜單,只顯示選定的根目錄項目及其要展開的子節點。這是我想要實現的。 (左側垂直菜單) 有什麼建議嗎?DDR Treeview菜單顯示選定的根目錄及其子節點

enter image description here

這是XSLT代碼,目前顯示的所有根項目。

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html"/> 
    <xsl:param name="ControlID" /> 
    <xsl:param name="Options" /> 
    <xsl:template match="/*"> 
    <xsl:apply-templates select="root" /> 
    </xsl:template> 
    <xsl:template match="root"> 
    <xsl:if test="node"> 
     <ul class="treeview filetree" id="{$ControlID}"> 
     <xsl:apply-templates select="node" /> 
     </ul> 
     <script type="text/javascript"> 
     jQuery(function($) { 
      $("#<xsl:value-of select="$ControlID" />").treeview(
      <xsl:value-of select="$Options" disable-output-escaping="yes" /> 
     ); 
     }); 
     </script> 
    </xsl:if> 
    </xsl:template> 
    <xsl:template match="node"> 
    <li> 
     <xsl:if test="node and (@depth != 0 or @breadcrumb = 1)"> 
     <xsl:attribute name="class">open</xsl:attribute> 
     </xsl:if> 
     <xsl:choose> 
     <xsl:when test="@enabled = 0"> 
      <xsl:value-of select="@text" /> 
     </xsl:when> 
     <xsl:otherwise> 
      <a href="{@url}"> 
      <xsl:choose> 
       <xsl:when test="@selected=1"> 
       <xsl:attribute name="class">selected breadcrumb</xsl:attribute> 
       </xsl:when> 
       <xsl:when test="@breadcrumb=1"> 
       <xsl:attribute name="class">breadcrumb</xsl:attribute> 
       </xsl:when> 
      </xsl:choose> 
      <xsl:value-of select="@text" /> 
      </a> 
     </xsl:otherwise> 
     </xsl:choose> 
     <xsl:if test="node"> 
     <ul style="list-item-style:none"> 
      <xsl:apply-templates select="node" /> 
     </ul> 
     </xsl:if> 
    </li> 
    </xsl:template> 
</xsl:stylesheet> 
+5

您應該將xml添加到問題中。 – Sandro 2013-04-02 12:34:43

+1

您是否試圖隱藏子項中的整個行(包括主頁,關於,服務/位置和聯繫人列)或僅顯示最左側的列? – dlp 2013-04-16 20:51:09

回答

0

如果您只獲取根項目,則需要更改爲菜單定義的NodeSelector。我相信速記值RootChildren會給你你想要的。

+0

我如何解決這個問題。然而,你的答案也有幫助。 – user1781367 2014-02-24 00:06:02

1

如果您提供了您想要轉換的輸入代碼的示例,這將有所幫助。

我認爲它基本上是這樣的:

<root> 
    <node enabled="1" depth="1" text="Service" selected="true" breadcrumb="0"/> 
    <node> 
    <node> 
     <node/> 
    </node> 
    </node> 
    <node> 
    <node/> 
    </node> 
    <node/> 
</root> 

可以跳過第一個模板匹配以及那些第一,如果元素和僅直接您感興趣的不匹配測試,這樣的事情。應該做的伎倆:

<!-- ... --> 
<!-- process only "root" elements that have at least one "node" element --> 
<xsl:template match="/root[node]"> 
    <ul class="treeview filetree" id="{$ControlID}"> 
    <xsl:apply-templates select="node" /> 
    </ul> 
    <!-- ... --> 
</xsl:template> 
<xsl:template match="node"> 
    <!-- ... --> 
</xsl:template> 
1

沒有源XML真的很難制定出你想在這裏做什麼,但我會說你要所有節點的主要原因是該匹配012的模板元素是遞歸的並且不隱藏後代。如果將display:none添加到node模板末尾的ul元素上的style屬性(或將list-item-style更改爲display),則可能會得到您想要的結果。

相關問題