2015-09-22 5 views
0

У меня уже есть жесткий код в файле скина, используя меню dnn:, которое выбирает определенные узлы, но похоже, что идентификатор должен создать несколько дополнительных скинов, чтобы дифференцировать NodeSelectors между элементами rootMenu (4 из них).Узлы динамического отображения и их дочерние элементы DNN

Есть ли способ, используя тот же файл скина на любой заданной странице, который я могу определить, в каком элементе rootMenu я нахожусь, петля через его первый уровень дочерних страниц в виде вкладок, а перечисление их детей в расширяемой части аккордеона как это происходит?

Uhh ... чем проще, тем лучше.

Использование

<ddr:MENU menustyle="Accordion" runat="server" /></dnn:MENU> 

и это Accordian.XSLT показали обещание, но расширение не работало.

<?xml version="1.0" encoding="UTF-8"?> 
 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
 
\t <xsl:output method="html"/> 
 
\t <xsl:param name="ControlID" /> 
 
\t <xsl:param name="Options" /> 
 
\t <xsl:param name="CSSClass" /> 
 
    <xsl:template match="/*"> 
 
    <xsl:apply-templates select="root" /> 
 
    </xsl:template> 
 
    
 
    <xsl:template match="root/node"> 
 
\t \t <xsl:if test="@breadcrumb = 1 and count(descendant::node) > 0"> 
 

 
\t \t \t <script type="text/javascript"> 
 
\t  jQuery(function($) { 
 
\t   var options = { initialIndex: -1 }; 
 
\t   $.extend(options, { <xsl:apply-templates select="node" mode="breadcrumb" /> }, <xsl:value-of select="$Options" />); 
 
\t \t \t \t \t $("#<xsl:value-of select="$ControlID" />").tabs(".toolsaccordion div.pane", options); 
 
\t \t \t \t }); 
 
\t \t \t </script> 
 
\t \t \t <div id="{$ControlID}" class="toolsaccordion"> 
 
\t \t \t \t <xsl:apply-templates select="node" /> 
 
\t \t \t </div> 
 
\t \t </xsl:if> 
 
    </xsl:template> 
 
    <xsl:template match="node" mode="breadcrumb"> 
 
    <xsl:if test="@breadcrumb = 1">initialIndex: <xsl:value-of select="position() - 1" /></xsl:if> 
 
    </xsl:template> 
 
\t <xsl:template match="node"> 
 
\t \t <h3> 
 
\t \t \t 
 
\t \t \t \t <xsl:value-of select="@text" /> 
 
\t \t \t 
 
\t \t </h3> 
 
\t \t <div class="pane"> 
 
\t \t \t <xsl:apply-templates select="node" mode="sub"> 
 
\t \t \t \t <xsl:with-param name="level" select="0" /> 
 
\t \t \t </xsl:apply-templates> 
 
\t \t </div> 
 
\t </xsl:template> 
 
\t <xsl:template match="node" mode="sub"> 
 
\t \t <xsl:param name="level" /> 
 
\t \t <xsl:choose> 
 
\t \t \t <xsl:when test="@enabled = 0"> 
 
\t \t \t \t <div> 
 
\t \t \t \t \t <xsl:call-template name="indent"> 
 
\t \t \t \t \t \t <xsl:with-param name="level" select="$level" /> 
 
\t \t \t \t \t </xsl:call-template> 
 
\t \t \t \t \t <xsl:value-of select="@text" /> 
 
\t \t \t \t </div> 
 
\t \t \t </xsl:when> 
 
\t \t \t <xsl:otherwise> 
 
\t \t \t \t <a style="display:block" href="{@url}"> 
 
\t \t \t \t \t <xsl:call-template name="indent"> 
 
\t \t \t \t \t \t <xsl:with-param name="level" select="$level" /> 
 
\t \t \t \t \t </xsl:call-template> 
 
\t \t \t \t \t <xsl:value-of select="@text" /> 
 
\t \t \t \t </a> 
 
\t \t \t </xsl:otherwise> 
 
\t \t </xsl:choose> 
 
\t \t <xsl:apply-templates select="node" mode="sub"> 
 
\t \t \t <xsl:with-param name="level" select="$level + 1" /> 
 
\t \t </xsl:apply-templates> 
 
\t </xsl:template> 
 
\t <xsl:template name="indent"> 
 
\t \t <xsl:param name="level" /> 
 
\t \t <xsl:if test="$level &gt; 0"> 
 
\t \t \t &#160;&#160;<xsl:call-template name="indent"> 
 
\t \t \t \t <xsl:with-param name="level" select="$level - 1" /> 
 
\t \t \t </xsl:call-template> 
 
\t \t </xsl:if> 
 
\t </xsl:template> 
 
</xsl:stylesheet>
Here is the menudef.xml 
 

 

 

 

 
<? xml version = "1.0" 
 
encoding = "utf-8" ?> 
 
    <manifest> 
 
    <template> Accordion.xslt < /template> 
 
    <scripts> 
 
    <script jsObject="jQuery"/> 
 
    < script jsObject = "jQuery.tools.tabs" > http: //www.itdraws.com/js/flowplayer.org-1.1.2-jquery.tools.min.js</script> 
 
    < /scripts> 
 
    <stylesheets> 
 
    <stylesheet>[MANIFEST]/tabs - accordion.css < /stylesheet> 
 
    </stylesheets > 
 
    <defaultClientOptions> 
 
    < clientOption name = "tabs" 
 
type = "string" 
 
value = "h3"/> 
 
    < clientOption name = "effect" 
 
type = "string" 
 
value = "slide"/> 
 
    < clientOption name = "event" 
 
type = "string" 
 
value = "onclick"/> 
 
    < /defaultClientOptions> 
 
</manifest >

+0

Это, безусловно, возможно, я посмотрю, не могу ли я найти код примера для этого. –

+0

, что было бы супер великим Крисом, спасибо! – GomezJr

+0

, по крайней мере, я бы рассмотрел условный код, который пишет/не пишет блоки кода меню. – GomezJr

ответ

0

Ну, может быть проще использовать шаблон Razor для работы в условном материале.

(Вы могли бы взглянуть на шаблон MegaMenu в качестве примера.)

+0

im не совсем уверен, как это сделать как аккордеон – GomezJr

0

Очень короткий ответ, что вы бы генерировать HTML (используя любой шаблон вы используете) в формате «аккордеона», а затем использовать jquery.accordion, чтобы выполнить аккордеонную работу.

Взгляните на документацию jquery для примеров структуры HTML, которые необходимо создать.

+0

Я привел jQuery '<% @ Register TagPrefix =" dnn "TagName =" JQUERY "Src =" ~/Admin/Skins/jQuery.ascx "%>' установить этот ' $ (функция() { $ ("#lobNavs") .accordion ({ складная: правда, heightStyle: "содержание", активные: curNode }); }); ' и использовали этот код меню. '' и, соответственно, стиль. Дал мне то, что мне нужно, любопытное .... – GomezJr

+0

Мне все еще нужно показывать/не показывать контент на основе корневого родителя. Это было важной частью того, что мне нужно включить в файл skin/ascx. У меня есть это, но он работает только на одной странице (которая является родительской) '<% if (PortalSettings.ActiveTab.TabName.Equals (« Управление богатством »)) {%>' Это тоже работает, но снова , только для одной страницы '<% if (DotNetNuke.Entities.Portals.PortalController.GetCurrentPortalSettings(). ActiveTab.ParentId.Equals (480)) {%>' – GomezJr

0

У меня есть несколько ответов здесь, которые работают.

DNN ASCX если/другое() заявления выглядеть следующим образом:

<% if (singleConditionExample) { %> 
    alert("Hello World"); 

<% } else if (multipleConditionsHere() || multipleConditionsHere() && multipleConditionsHere()) { %> // standard operators. you get the idea. 
    alert("elseifConditionsHere"); 

<% } else { %> 
    alert("Else Msg"); 

<% } %> 

Что касается получения DNN страницы табетический, TABNAME, ParentID, они вошли в если() условия.

// ТОК СТР КОРНЕВАЯ родителю DNN BREADCRUB

PortalSettings.ActiveTab.BreadCrumbs[0]

// ТОК DNN страницу

PortalSettings.ActiveTab.TabName.Equals("Wealth Management")

// ТОК DNN СТР ID номер

<%=PortalSettings.ActiveTab.TabID %>

// CURRENT DNN PAGE РОДИТЕЛЕЙ ID

DotNetNuke.Entities.Portals.PortalController.GetCurrentPortalSettings().ActiveTab.ParentId.Equals(480)

Если вы хотите, чтобы записать их на странице:

<%=PortalSettings.ActiveTab.BreadCrumbs(0).FullUrl%>

Я уверен, есть больше, чтобы учиться, и когда я делаю узнайте больше, поскольку это связано с получением идентификатора страницы DNN, хлебных кровей и т. д. ... я обновлю этот ответ.

Cheers!

 Смежные вопросы

  • Нет связанных вопросов^_^