2013-02-19 8 views
6

私が展開する唯一の選択ルート項目とその子ノードを表示するには、DotNetNukeのためのDDRツリービューのメニューに取り組んでいます。ここに私が達成しようとしていることがあります。 (左下のメニュー) アドバイスをお願いしますか?DDRツリービューメニュー表示選択したルートとその子ノード

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

+1

子アイテムの列全体(ホーム、About、サービス/ロケーション、連絡先の列を含む)を隠すか、最も左の列だけを隠そうとしていますか? – dlp

答えて

0

あなただけのルート項目を取得している場合は、メニュー用に定義されNodeSelectorを変更したいと思います。私は、省略名の値RootChildrenがあなたの望むものを与えると信じています。

+0

この問題をどのように解決しましたか。しかし、あなたの答えは助けになりました。 – user1781367

1

変換する入力コードの例を指定した場合は役に立ちます。

私はこのようにその基本的なものが想定しています

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

は、あなたが最初のテンプレートマッチし、それらの最初のif-要素をスキップして、直接、テストなしであなたが興味を持っているものだけをこのような何かを一致させることができます。それはあなたがここで何をしようとして働かせて、本当に難しいソースXMLがなけれ

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

、私はあなたがすべてのノードを取得している主な理由はあるでしょうね:トリックを行う必要があります012と一致するテンプレート要素は再帰的であり、子孫を隠すことはありません。あなたがnodeテンプレートの終わりにul要素にstyle属性にdisplay:noneを追加(またはdisplayからlist-item-styleを変更する)場合は、あなたが欲しいものを得ることができます。

関連する問題