Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Не выводится дополнительное меню в версии "Start"

Автор BabajkaРаздел Шаблоны XSLT

Ответов: 4
Просмотров: 3609
Последний ответ 10 Января 2013, 10:08:04
от admin
Магазин "Современный" - добавление заголовка к левому меню каталога

Автор manadsgnРаздел Шаблоны XSLT

Ответов: 4
Просмотров: 4026
Последний ответ 25 Июня 2012, 17:33:00
от manadsgn
Вывод страницы в меню с отключением вывода в карте сайта

Автор alpotemkinРаздел Макросы UMI.CMS

Ответов: 6
Просмотров: 5645
Последний ответ 03 Ноября 2011, 15:07:29
от alpotemkin
Текущая страница - добавление класса к ссылке главного меню

Автор manadsgnРаздел Шаблоны XSLT

Ответов: 2
Просмотров: 2996
Последний ответ 24 Июня 2012, 14:00:10
от manadsgn
Вывод в меню только разделов с определенными свойствами

Автор poloРаздел Шаблоны XSLT

Ответов: 4
Просмотров: 5530
Последний ответ 24 Июня 2011, 12:58:58
от polo

0 Пользователей и 1 Гость просматривают эту тему.

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
главное меню..
« : 11 Сентября 2012, 19:19:50 »
есть шаблон меню...

<xsl:output indent="no" />

  <!-- шаблон для всего меню  -->
  <xsl:template match="udata[@module = 'content'][@method = 'menu']" mode="menu">
<div class="main-menu">
        <ul>
        <xsl:apply-templates select="items/item" mode="menu"/>
            </ul>
        </div>
  </xsl:template>

  <!-- Пункт меню -->
  <xsl:template match="item" mode="menu">

<xsl:variable name="item" select="document(concat('udata://content/menu/notemplate/1/', @id))/udata/items/item"  />

<xsl:choose>
<xsl:when test="$item">
<!-- Ссылка -->
        <xsl:apply-templates select="." mode="menu_link"/>
<xsl:apply-templates select="." mode="menu_sub"/>
</xsl:when>
<xsl:otherwise>
<!-- Ссылка -->
        <xsl:apply-templates select="." mode="menu_link"/>
</xsl:otherwise>
</xsl:choose>
       

  </xsl:template>
 

  <!-- Пункт меню (активный) -->
  <xsl:template match="item[@status = 'active']" mode="menu">

<xsl:variable name="item" select="document(concat('udata://content/menu/notemplate/1/', @id))/udata/items/item"  />

<xsl:choose>
<xsl:when test="$item">
<!-- Ссылка -->
        <li class="current expandable"><xsl:apply-templates select="." mode="menu_link"/><xsl:apply-templates select="." mode="menu_sub"/></li>
</xsl:when>
<xsl:otherwise>
<!-- Ссылка -->
        <xsl:apply-templates select="." mode="menu_link"/>
</xsl:otherwise>
</xsl:choose>
 
  </xsl:template>
 
  <!-- Вложенные пункты -->
  <xsl:template match="item" mode="menu_sub">
 
  <xsl:variable name="item" select="document(concat('udata://content/menu/notemplate/1/', @id))/udata/items/item"  />

        <xsl:if test="$item">
       
        <ul>
        <xsl:apply-templates select="document(concat('udata://content/menu/notemplate/1/', @id))/udata" mode="menu_sub" />
        </ul>
       
        </xsl:if>
       
  </xsl:template>
 
  <!-- Подпункты -->
  <xsl:template match="udata" mode="menu_sub">
  <!-- Ссылка -->
        <xsl:apply-templates select="items/item" mode="menu_link"/>
  </xsl:template>
 
  <!-- Ссылка -->
  <xsl:template match="item" mode="menu_link">

     <!-- Определение ссылки -->
    <xsl:variable name="is_submenu_link" select="document(concat('upage://', @id, '.submenu_link'))//value" />
    <xsl:variable name="outer_link" select="document(concat('upage://', @id, '.ssylka'))//value" />
    <xsl:variable name="outer_link_blank" select="document(concat('upage://', @id, '.v_novom_okne'))//value" />
   

    <xsl:choose>
    <!-- Если введен url -->
    <xsl:when test="$outer_link != ''">
   
<xsl:choose>
<!-- Если в новом окне -->
    <xsl:when test="$outer_link_blank = 1" >
<a umi:element-id="{@id}" umi:field-name="h1" href="{$outer_link}" target="_blank" ><xsl:value-of select="@name"/></a>
    </xsl:when>
    <!-- В текущем окне -->
    <xsl:otherwise>
<li id="b"><a umi:element-id="{@id}" umi:field-name="h1" href="{$outer_link}"><xsl:value-of select="@name"/></a></li>
    </xsl:otherwise>
    </xsl:choose>
   
    </xsl:when>
    <xsl:otherwise>
    <xsl:choose>
    <!-- Если ссылка на дочернюю страницу -->
    <xsl:when test="$is_submenu_link = 1" >
<li id="c"> <a umi:element-id="{@id}" umi:field-name="h1" href="{document(concat('udata://content/menu/0/1/', @id))/udata/items/item[1]/@link}" ><xsl:value-of select="@name"/></a></li>
    </xsl:when>
    <!-- Обычная ссылка -->
    <xsl:otherwise>
<li id="d"><a umi:element-id="{@id}" umi:field-name="h1" href="{@link}" ><xsl:value-of select="@name"/></a></li>
    </xsl:otherwise>
    </xsl:choose>
    </xsl:otherwise>
    </xsl:choose>

  </xsl:template>

он выводит так:
<div xmlns="" class="main-menu">
<ul>
   <li id="d"/>
   <ul/>
   <li id="d"/>
   <ul>
      <li id="d"/>
      <li id="d"/>
   </ul>
   <li id="d"/>
   <ul/>
</ul>
</div>

а мне надо чтоб <ul> был в <li>
т.е. так:

<div class="main-menu">
   <ul>
      <li id="d">
         <ul/>
      </li>
      <li id="d">
         <ul>
            <li id="d"/>
            <li id="d"/>
         </ul>
      </li>
      <li id="d">
         </ul>
      </li>
</div>

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:главное меню..
« Ответ #1 : 12 Сентября 2012, 17:26:25 »
для начала скажу что использовать повторный вызом макроса udata://content/menu для вывода подпунктов это не совсем рационально (если конечно перед вами не стояла какая-то особенная задача), для этого есть параметр который указывает сколько уровней меню выводить.

Для начала, попробуйте повторить описанные специально для данного случая инструкции на сайте официальной документации http://help-dev.umi-cms.ru/chapter.MenuWithXSLT.multilevel.html

Если не получиться пишите, поможем  ;)

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:главное меню..
« Ответ #2 : 13 Сентября 2012, 09:47:58 »
я сделала все как там написано... но он мне выводит только подпункты активного меню... хоть я и прописываю строку которую там говорят... вот:

  <xsl:template match="items" mode="menu">
    <ul>
      <xsl:apply-templates select="item" mode="menu"/>
    </ul>
  </xsl:template>

  <!-- шаблон для ВСЕХ активных пунктов меню -->

  <xsl:template match="item[@status = 'active']" mode="menu">
    <li>
       <span>
         <xsl:value-of select="@name"/>
       </span>
       <xsl:apply-templates select="items" mode="menu"/>
    </li>
  </xsl:template>

  <!-- шаблон для ВСЕХ неактивных пунктов меню, а также для ВСЕХ пунктов, являющихся родительскими для текущей страницы -->

  <xsl:template match="item|item[.//item[@status = 'active']]" mode="menu">
    <li>
       <a href="{@link}">
         <xsl:value-of select="@name"/>
       </a>
       <xsl:apply-templates select="items" mode="menu"/><!--Эта строка я так понимаю для того, чтоб подпункты выводились... Но в неактивном меню они все равно не выводятся(((-->
    </li>
  </xsl:template>

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:главное меню..
« Ответ #3 : 13 Сентября 2012, 10:00:59 »
и мне еще надо чтоб только второй уровень выводил... у меня получилось только чтоб все.. вот этот код работает нормально... выводит во всех и активных и неактивных.. но выводит абсолютно все уровни.. а мне тока второй надо..
 <xsl:template match="udata[@module = 'content'][@method = 'menu']">
    <ul>
      <xsl:apply-templates select="items/item" mode="menu"/>
    </ul>
  </xsl:template>

  <!-- шаблон для ВСЕХ неактивных пунктов меню -->

  <xsl:template match="item" mode="menu">
    <li>
      <a href="{@link}">
        <xsl:value-of select="@name"/>
      </a>
      <!-- удалите этот вызов, если нужно отображать подстраницы только для активных пунктов меню -->
      <xsl:apply-templates select="document(concat('udata://content/menu/0/1/', @id))/udata[items/item]"/>
    </li>
  </xsl:template>

  <!-- шаблон для ВСЕХ активных пунктов меню -->

  <xsl:template match="item[@status = 'active']" mode="menu">
    <li>
       <a href="{@link}" class="active">
         <xsl:value-of select="@name"/>
       </a>
       <xsl:apply-templates select="document(concat('udata://content/menu/0/1/', @id))/udata[items/item]"/>
    </li>
  </xsl:template>

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:главное меню..
« Ответ #4 : 13 Сентября 2012, 11:38:46 »
у вас получилось все в кучу

вызов вот такой
 <xsl:apply-templates select="document('udata://content/menu/0/3')/udata" />

шаблоны для меню вот такие
<!-- шаблон для всего меню -->

  <xsl:template match="udata[@module = 'content'][@method = 'menu']">
      <xsl:apply-templates select="items" mode="menu"/>
  </xsl:template>

  <!-- шаблон для начала всех списков -->

  <xsl:template match="items" mode="menu">
    <ul>
      <xsl:apply-templates select="item" mode="menu"/>
    </ul>
  </xsl:template>

  <!-- шаблон для ВСЕХ неактивных пунктов меню -->
  <xsl:template match="item" mode="menu" />

  <!-- шаблон для ВСЕХ активных пунктов меню -->
  <xsl:template match="item[@status = 'active']" mode="menu">
    <li>
       <xsl:apply-templates select="items" mode="sub_menu"/>
    </li>
  </xsl:template>


<!-- шаблон для начала списков меню второго и последующих уровней-->
<xsl:template match="items" mode="sub_menu">
    <ul class="sub_menu">
      <xsl:apply-templates select="item" mode="sub_menu"/>
    </ul>
  </xsl:template>

<!-- шаблон для неактивных пунктов меню второго и последующих уровней-->
<xsl:template match="item" mode="sub_menu">
    <li>
      <a href="{@link}">
        <xsl:value-of select="@name"/>
      </a>
        <xsl:apply-templates select="items" mode="sub_menu"/>
       </li>
  </xsl:template>

  <!-- шаблон дляактивных пунктов меню второго и последующих уровней -->
  <xsl:template match="item[@status = 'active']" mode="menu">
    <li>
       <a href="{@link}" class="active">
         <xsl:value-of select="@name"/>
       </a>
       <xsl:apply-templates select="items" mode="sub_menu"/>
    </li>
  </xsl:template>

в итоге у вас выведультся только вторые и так далее уровни меню у активного пункта меню 1 уровня

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:главное меню..
« Ответ #5 : 13 Сентября 2012, 12:04:55 »
но мне то надо чтоб выводились все пункты меню до 2 уровня...
а так по вашему предложению получается выводится толко активынй пункт меню с его вторым уровнем... и все..(

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:главное меню..
« Ответ #6 : 13 Сентября 2012, 12:07:40 »
Цитировать
и мне еще надо чтоб только второй уровень выводил... у меня получилось только чтоб все.. вот этот код работает нормально... выводит во всех и активных и неактивных.. но выводит абсолютно все уровни.. а мне тока второй надо..

сформулируйте точно что вам надо, а лучше разберите по кусочкам приведенный код, так как макрос меню один из самых распространенных и если вы его поймете и освоите, то вам будет проще постигать другие вещи

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:главное меню..
« Ответ #7 : 13 Сентября 2012, 12:43:23 »
короче мудрила мудрила я и вымудрила)))
добавила в админке поле-флаг Ссылка на подменю(submenu_link) и поставила условие.. получилось вот это:
<xsl:template match="udata[@module = 'content'][@method = 'menu']">
  <ul>
      <xsl:apply-templates select="items/item" mode="menu"/>
  </ul>
</xsl:template>

<!-- активный пункт меню -->
<xsl:template match="item[@status = 'active']" mode="menu">
<xsl:variable name="is_submenu_link" select="document(concat('upage://', @id, '.submenu_link'))//value" />
<xsl:choose>
<xsl:when test="$is_submenu_link">
  <li id="a">
     <a href="{@link}" class="active">
       <span><xsl:value-of select="@name" disable-output-escaping="yes"/></span>
     </a>
     <xsl:apply-templates select="document(concat('udata://content/menu/notemplate/1/', @id))/udata[items/item]"/>
  </li>
  </xsl:when>
<xsl:otherwise>
 <li id="b">
     <a href="{@link}" class="active">
       <xsl:value-of select="@name" disable-output-escaping="yes"/>
     </a>
  </li>
  </xsl:otherwise>
</xsl:choose>

</xsl:template>

<!-- неактивный пункт меню -->
<xsl:template match="item" mode="menu">
<xsl:variable name="is_submenu_link" select="document(concat('upage://', @id, '.submenu_link'))//value" />
<xsl:choose>
<xsl:when test="$is_submenu_link">
  <li id="a">
     <a href="{@link}">
       <span><xsl:value-of select="@name" disable-output-escaping="yes"/></span>
     </a>
     <xsl:apply-templates select="document(concat('udata://content/menu/notemplate/1/', @id))/udata[items/item]"/>
  </li>
  </xsl:when>
<xsl:otherwise>
 <li id="b">
     <a href="{@link}">
       <xsl:value-of select="@name" disable-output-escaping="yes"/>
     </a>
  </li>
  </xsl:otherwise>
</xsl:choose>

</xsl:template>

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:главное меню..
« Ответ #8 : 13 Сентября 2012, 12:52:45 »
в итоге получилось?

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:главное меню..
« Ответ #9 : 13 Сентября 2012, 13:01:21 »
да)) то что доктор прописал)))

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:главное меню..
« Ответ #10 : 13 Сентября 2012, 20:56:21 »
блин... опять у меня вопрос((( вконце меню почему то какой то нолик выводится.. не могу понять к чему это...

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:главное меню..
« Ответ #11 : 13 Сентября 2012, 21:40:50 »
покажите свой шаблон и вызов макроса

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:главное меню..
« Ответ #12 : 13 Сентября 2012, 22:34:18 »
вот шаблон:
<xsl:template match="udata[@module = 'content'][@method = 'menu']">
  <ul>
      <xsl:apply-templates select="items/item" mode="menu"/>
  </ul>
</xsl:template>

<!-- активный пункт меню -->
<xsl:template match="item[@status = 'active']" mode="menu">
<xsl:variable name="is_submenu_link" select="document(concat('upage://', @id, '.submenu_link'))//value" />
<xsl:choose>
<xsl:when test="$is_submenu_link">
  <li id="a">
     <a href="{@link}" class="active">
       <span><xsl:value-of select="@name" disable-output-escaping="yes"/></span>
     </a>
     <xsl:apply-templates select="document(concat('udata://content/menu/notemplate/1/', @id))/udata[items/item]"/>
  </li>
  </xsl:when>
<xsl:otherwise>
  <li id="b">
     <a href="{@link}" class="active">
       <xsl:value-of select="@name" disable-output-escaping="yes"/>
     </a>
  </li>
  </xsl:otherwise>
</xsl:choose>

</xsl:template>

<!-- неактивный пункт меню -->
<xsl:template match="item" mode="menu">
<xsl:variable name="is_submenu_link" select="document(concat('upage://', @id, '.submenu_link'))//value" />
<xsl:choose>
<xsl:when test="$is_submenu_link">
  <li id="a">
     <a href="{@link}">
       <span><xsl:value-of select="@name" disable-output-escaping="yes"/></span>
     </a>
     <xsl:apply-templates select="document(concat('udata://content/menu/notemplate/1/', @id))/udata[items/item]"/>
  </li>
  </xsl:when>
<xsl:otherwise>
  <li id="b">
     <a href="{@link}">
       <xsl:value-of select="@name" disable-output-escaping="yes"/>
     </a>
  </li>
  </xsl:otherwise>
</xsl:choose>

</xsl:template>

это вызов:

<xsl:apply-templates select="document('udata://content/menu/0/2')/udata/items" mode="menu"/>

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:главное меню..
« Ответ #13 : 14 Сентября 2012, 01:12:30 »
вызов обращается к элементам /udata/items

и нет ни одного шаблона у которого бы был match для данного элемента.

Всю мешанину не стал разбирать, но как минимум вам надо поменять вызов на

<xsl:apply-templates select="document('udata://content/menu/0/2')/udata" />

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:главное меню..
« Ответ #14 : 14 Сентября 2012, 10:20:56 »
так... 0 чудесным образом исчез... теперь вопрос как сделать так чтоб между активынми и неактивными ссылками не было пробела... т.е. не <li>Неактивная ссылка</li> <li>Активная ссылка</li> а <li>Неактивная ссылка</li><li>Активная ссылка</li>