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

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

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

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

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

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

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

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

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

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

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

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

*

muldy

  • ***
  • 222
  • +9/-1
    • Просмотр профиля
Здравствуйте, встала не очевидная задча формирования меню!
Есть каталог, который выглядет так:

Раздел 1
Раздел 2
Раздел 3
Раздел 4
и т.д.

Все четыре или более пукнтов должны быть объедены в список, т.е так:
<ul>
Имя пункта
<ul>
<li>Раздел 1</li>
<li>Раздел 2</li>
<li>Раздел 3</li>
<ul>
Имя пункта
<ul>
<li>Раздел 4</li>
<li>Раздел 5</li>
<li>Раздел 6</li>
<ul>
</ul>

Не могу разобратся, станадартными методами не получается, т.к все разделы начинаются от корня сайта
Пробывал задавать каждому элменту свои шаблоны, но как оказалось все равно не получается!
Подскажите как можно реализовать подобную задачу????

*

BaceH

  • ***
  • 141
  • +21/-0
    • Просмотр профиля
Re:Раскрывающеся меню из категорий
« Ответ #1 : 05 Марта 2013, 02:02:10 »
Цитировать
т.к все разделы начинаются от корня сайта
все это какие? внутренние разделы тоже от корня сайта?
как пытаетесь вывести? получается ли вывести первый уровень?
покажите шаблон :)

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Re:Раскрывающеся меню из категорий
« Ответ #2 : 05 Марта 2013, 09:20:27 »
Что нам нужно, что бы это сделать:
0. Найти как получать меню ( content::menu )
1. Получить список разделов верхней категории
2. Для каждого элемента верхней категории получить вложенные

К примеру, разделы у нас лежат в корне сайта.

Получаем верхнии категории:

<xsl:apply-template select="document('udata://content/menu')/udata/items" mode="my_menu"/>

Пишем шаблон для обработки верхних категорий. Я обычно делаю шаблоны с учётом случая, что элементов может не быть и выводить ничего не придётся, поэтому делаю так:

<xsl:template match="items" mode="my_menu">
<ul>
<xsl:apply-templates select="item" mode="my_menu"/>
</ul>
</xsl:template>
Если есть items, значит элементы есть и надо создать <ul/>

Теперь выводим элементы меню верхней категории.  К этому моменты мы вернёмся ещё, поэтому пометим его (1)

<xsl:template match="item" mode="my_menu">
<li><a href="@link"><xsl:value-of select="."/></a></li>
</xsl:template>
Мы вывели меню в таком виде:
<ul>
<li><a href="link1">ВерхнийРаздел1</a></li>
<li><a href="link2">ВерхнийРаздел2</a></li>
<li><a href="link3">ВерхнийРаздел3</a></li>
<li><a href="link4">ВерхнийРаздел4</a></li>
</ul>

Для каждого элемента верхнего раздела нужно вывести дочерние. Воспользуемся ещё раз content::menu и вернёмся к листингу (1), слегка изменив его

<xsl:template match="item" mode="my_menu">
<li>
<a href="@link"><xsl:value-of select="."/></a>
<xsl:apply-template select="document(concat('udata://menu/content///',@id))/udata.item" mode="inner_menu"/>
</li>
</xsl:template>

Теперь опишем шаблон для вывода внутренних разделов меню.
<xsl:template match="items" mode="inner_menu">
<ul>
<xsl:apply-templates select="item" mode="inner_menu"/>
</ul>
</xsl:template>

<xsl:template match="item" mode="inner_menu">
<li><a href="@link"><xsl:value-of select="."/></a></li>
</xsl:template>

Код не проверял, фигачил прям так.

Решение этой задачей является базовой для понимания xslt и базовой для понимания работы с макросами umi

*

BaceH

  • ***
  • 141
  • +21/-0
    • Просмотр профиля
Re:Раскрывающеся меню из категорий
« Ответ #3 : 05 Марта 2013, 23:58:15 »
при построении меню каталога лучше воспользоваться getcategorylist
udata://catalog/getCategoryList/notemplate/(ид_раздела)/100
в дальнейшем все также.
исходя из приведенной верстки, внутреннее меню можно строить тем же шаблоном что и первый уровень.

*

muldy

  • ***
  • 222
  • +9/-1
    • Просмотр профиля
Re:Раскрывающеся меню из категорий
« Ответ #4 : 06 Марта 2013, 13:07:30 »
Что нам нужно, что бы это сделать:
0. Найти как получать меню ( content::menu )
1. Получить список разделов верхней категории
2. Для каждого элемента верхней категории получить вложенные

К примеру, разделы у нас лежат в корне сайта.

Получаем верхнии категории:

<xsl:apply-template select="document('udata://content/menu')/udata/items" mode="my_menu"/>

Пишем шаблон для обработки верхних категорий. Я обычно делаю шаблоны с учётом случая, что элементов может не быть и выводить ничего не придётся, поэтому делаю так:

<xsl:template match="items" mode="my_menu">
<ul>
<xsl:apply-templates select="item" mode="my_menu"/>
</ul>
</xsl:template>
Если есть items, значит элементы есть и надо создать <ul/>

Теперь выводим элементы меню верхней категории.  К этому моменты мы вернёмся ещё, поэтому пометим его (1)

<xsl:template match="item" mode="my_menu">
<li><a href="@link"><xsl:value-of select="."/></a></li>
</xsl:template>
Мы вывели меню в таком виде:
<ul>
<li><a href="link1">ВерхнийРаздел1</a></li>
<li><a href="link2">ВерхнийРаздел2</a></li>
<li><a href="link3">ВерхнийРаздел3</a></li>
<li><a href="link4">ВерхнийРаздел4</a></li>
</ul>

Для каждого элемента верхнего раздела нужно вывести дочерние. Воспользуемся ещё раз content::menu и вернёмся к листингу (1), слегка изменив его

<xsl:template match="item" mode="my_menu">
<li>
<a href="@link"><xsl:value-of select="."/></a>
<xsl:apply-template select="document(concat('udata://menu/content///',@id))/udata.item" mode="inner_menu"/>
</li>
</xsl:template>

Теперь опишем шаблон для вывода внутренних разделов меню.
<xsl:template match="items" mode="inner_menu">
<ul>
<xsl:apply-templates select="item" mode="inner_menu"/>
</ul>
</xsl:template>

<xsl:template match="item" mode="inner_menu">
<li><a href="@link"><xsl:value-of select="."/></a></li>
</xsl:template>

Код не проверял, фигачил прям так.

Решение этой задачей является базовой для понимания xslt и базовой для понимания работы с макросами umi

Этот вариант базовый, он понятен, но суть в том что у меня нет вложенных разделов!

Я решил задачу с помощью usel протокола!
Если надо могу поделиться своим способом!


*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Раскрывающеся меню из категорий
« Ответ #5 : 09 Марта 2013, 10:54:38 »

Я решил задачу с помощью usel протокола!
Если надо могу поделиться своим способом!


опишите конечно, может сейчас и не надо никому, но все равно лишним не будет

*

muldy

  • ***
  • 222
  • +9/-1
    • Просмотр профиля
Re:Раскрывающеся меню из категорий
« Ответ #6 : 15 Марта 2013, 16:28:25 »
Имеем разделы от корня сайта:
- Телевизоры SOny -15"
   - Товар
   - Товар
   - Товар
- Телевизоры SOny -20"
   - Товар
   - Товар
   - Товар
- Телевизоры SOny -25"
   - Товар
   - Товар
   - Товар

Требуется вывести все разделы в меню под общим именем, не разделом просто пунктом: Телевизоры.

Чтобы получить подобное меню:
<ul>
<li><a href="">Sony</a>
<ul><li><a href="">Телевизоры SOny -15"</a></li>
<li><a href="">Телевизоры SOny- 20"</a></li>
и т.д.
<ul>
<li>
</ul>
Идем в редактирование шаблона данных "Раздел каталога". Добавляем поле, заголовок - Телевизоры.


Создаем шаблон usel выборки вида:

<?xml version="1.0" encoding="utf-8"?>
<selection>
   <target result="pages">
      <type id="77" />
   </target>
   <property name="{1}" value="1" />
   <limit page="0">40</limit>
</selection>

Где id=77 это шаблон раздела каталога.

В шаблоне данных создаем новое поле имя - Sony, которое будет относится к конкретной категории.

Вызываем меню:
<xsl:apply-templates select="document('usel://left_menu/sony')/udata" mode="menu_usel"/>

Далее обрабатываем шаблон:

<xsl:template match="udata" mode="testov_menu">
      <xsl:variable name="tes_id" select="page/@id" />
       <xsl:variable name="page_sony" select="document(concat('upage://', page/@id))//property[@name = 'podmenyu_tip_tovarov']/value/item/@id" />
       <xsl:variable name="ugud" select="document('usel://guide/132')/udata/item/id"/>
       <xsl:variable name="item_id" select="document('usel://ch_page/')/item/@id" />
       <xsl:apply-templates select="document('usel://guide/132')/udata/item" mode="newest1"/>
       <xsl:apply-templates select="total"/>
   </xsl:template>

Далее в принципе можно обработать стандартно вызов!