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

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

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

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

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

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

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

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

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

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

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

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

*

Sumrakrnd

  • ****
  • 311
  • +1/-0
  • Учусь «на примерах»
    • Просмотр профиля
Re: Два меню на странице, 2-х и 3-х уровневое
« Ответ #15 : 16 Февраля 2016, 16:25:59 »
Варианты разбивки:
1) на 3 ul в каждом по 3 пункта, т.е. всего 9
2) на 3 ul в каждом по 4 пункта, т.е. всего 12
3) на 4 ul в каждом по 6 пунктов, т.е. всего 24


А сложность меню для меня в том,я не знаю как контент страницы, образовать в это самое меню.
Как обратиться к структуре вложенных страниц, кстати, забыла сказать что, пункты Тест основные тоже вложены в страницу...
Т.е.:

|Начало
- Тест1
--Вариант1
--Вариант1
--Вариант1
--Вариант1
-Тест2
--Вариант2
--Вариант2
--Вариант2
-Тест3
--Вариант3
--Вариант3
---Вариант3-1
---Вариант3-1
---Вариант3-1
---Вариант3-1
--Вариант3
-Тест4
--Вариант4
--Вариант4
--Вариант4
« Последнее редактирование: 16 Февраля 2016, 16:31:18 от Sumrakrnd »

*

crazygeorgio

  • ***
  • 140
  • +7/-0
    • Просмотр профиля
Re: Два меню на странице, 2-х и 3-х уровневое
« Ответ #16 : 16 Февраля 2016, 16:29:50 »
у вас все получится!;)

*

Sumrakrnd

  • ****
  • 311
  • +1/-0
  • Учусь «на примерах»
    • Просмотр профиля
Re: Два меню на странице, 2-х и 3-х уровневое
« Ответ #17 : 16 Февраля 2016, 16:32:34 »
Не я такое придумала Т_Т
А с umi я не работаю первый раз.. ( и с xslt тоже...><

*

Sumrakrnd

  • ****
  • 311
  • +1/-0
  • Учусь «на примерах»
    • Просмотр профиля
Re: Два меню на странице, 2-х и 3-х уровневое
« Ответ #18 : 16 Февраля 2016, 18:06:36 »
Вот такая вещь у меня получилась вроде даже работает.
Только вот не привязываются классы... идет только первый, а все остальные не подтягиваются к другим (
Хотя с фоновыми картинками для span класс привязался.
И вопрос с ul остался..(
<xsl:template match="udata[@module = 'content'][@method = 'menu']" mode="top_menu">
<xsl:apply-templates select="item" mode="top_menu" />
</xsl:template>

<xsl:template match="udata[@module = 'menu']/item"  mode="top_menu">
<li class="tab">
<span>
<xsl:choose>
<xsl:when test="position() = 2"><xsl:attribute name="class">clinical</xsl:attribute></xsl:when>
<xsl:when test="position() = 4"><xsl:attribute name="class">cosmetology</xsl:attribute></xsl:when>
<xsl:when test="position() = 6"><xsl:attribute name="class">plastic_surgery</xsl:attribute></xsl:when>
<xsl:when test="position() = 8"><xsl:attribute name="class">stomatology</xsl:attribute></xsl:when>
</xsl:choose>
<xsl:value-of select="." />
</span>
<xsl:apply-templates select="document(concat('udata://content/menu/0/2/', @id))/udata" mode="top_drop" />
</li>
</xsl:template>

    <xsl:template match="udata" mode="top_drop" />

<xsl:template match="udata[items]" mode="top_drop">
<div class="tab-content">
<div>
<xsl:choose>
<xsl:when test="position() = 1"><xsl:attribute name="class">menu__wrap row-4</xsl:attribute></xsl:when>
<xsl:when test="position() = 2"><xsl:attribute name="class">menu__wrap row-3x3</xsl:attribute></xsl:when>
<xsl:when test="position() = 3"><xsl:attribute name="class">menu__wrap row-3x3</xsl:attribute></xsl:when>
<xsl:when test="position() = 4"><xsl:attribute name="class">menu__wrap row-3x4</xsl:attribute></xsl:when>
</xsl:choose>
<ul>
<xsl:apply-templates select="items/item" mode="top_drop" />
</ul>
</div>
</div>
</xsl:template>

<xsl:template match="item" mode="top_drop">
<li>
<a href="{@link}"><xsl:value-of select="@name" /></a>
<xsl:apply-templates select="items/item" mode="top_drop3" />
</li>
</xsl:template>

    <xsl:template match="udata" mode="top_drop_3" />

<xsl:template match="item" mode="top_drop3">
<span class="polygon"></span>
<div class="under_menu">
<div class="block-info">
<div class="list-services">
<a href="{@link}"><xsl:value-of select="@name" /></a>
</div>
</div>
</div>
</xsl:template>
« Последнее редактирование: 16 Февраля 2016, 18:24:35 от Sumrakrnd »

*

crazygeorgio

  • ***
  • 140
  • +7/-0
    • Просмотр профиля
Re: Два меню на странице, 2-х и 3-х уровневое
« Ответ #19 : 16 Февраля 2016, 18:33:31 »
    <xsl:template match="udata[@module = 'content'][@method = 'menu']" mode="top_menu">
<xsl:apply-templates select="item" mode="top_menu" />
    </xsl:template>

    <xsl:template match="udata[@module = 'menu']/item"  mode="top_menu">
<li class="tab">
<span><xsl:value-of select="." /></span>
<xsl:apply-templates select="document(concat('udata://content/menu/0/2/', @id))/udata" mode="top_drop">
   <xsl:with-param name="position" select="position()" />
</xsl:apply-templates>
</li>
    </xsl:template>

    <xsl:template match="udata" mode="top_drop" />

    <xsl:template match="udata[items]" mode="top_drop">
        <xsl:param name="position" />
<div class="tab-content">
                <xsl:apply-templates select="items/item" mode="top_drop" />
<div>
<xsl:choose>
<xsl:when test="$position = 1"><xsl:attribute name="class">menu__wrap row-4</xsl:attribute></xsl:when>
<xsl:when test="$position = 2"><xsl:attribute name="class">menu__wrap row-3x3</xsl:attribute></xsl:when>
<xsl:when test="$position = 3"><xsl:attribute name="class">menu__wrap row-3x3</xsl:attribute></xsl:when>
<xsl:when test="$position = 4"><xsl:attribute name="class">menu__wrap row-3x4</xsl:attribute></xsl:when>
</xsl:choose>
<ul>
<xsl:apply-templates select="items/item" mode="top_drop" />
</ul>
</div>
</div>
    </xsl:template>

*

Sumrakrnd

  • ****
  • 311
  • +1/-0
  • Учусь «на примерах»
    • Просмотр профиля
Re: Два меню на странице, 2-х и 3-х уровневое
« Ответ #20 : 16 Февраля 2016, 18:55:25 »
Даже не знаю как спросить.
А что происходит, когда присутствует <xsl:with-param name="position" select="position()" /> ?

А зачем перед position стоит $?



Поставила, только странно теперь... После блока tab-content появился повторяющиеся пункты скажем так)
Убрала <xsl:apply-templates select="items/item" mode="top_drop" /> после tab-content, пропали повторения.



*

Sumrakrnd

  • ****
  • 311
  • +1/-0
  • Учусь «на примерах»
    • Просмотр профиля
Re: Два меню на странице, 2-х и 3-х уровневое
« Ответ #21 : 16 Февраля 2016, 19:07:20 »
Кстати, вот если у меня появляется новый пункт меню, ему например добавить надо маленький блок или класс, отмечающий что он новый.

В некоторых cms это было реализовано чекбоксом в админке, соответственно галочка ставилась при создании и появлялась иконка или надпись.

А в Umi это как реализовать? И можно ли?

*

crazygeorgio

  • ***
  • 140
  • +7/-0
    • Просмотр профиля

*

Sumrakrnd

  • ****
  • 311
  • +1/-0
  • Учусь «на примерах»
    • Просмотр профиля
Re: Два меню на странице, 2-х и 3-х уровневое
« Ответ #23 : 17 Февраля 2016, 13:36:31 »
Простите, честно вчера пригружена уже была этой задачей>< поэтому сразу и спросила, не подумав поискать

А насчет реализации чекбокса(это было бы лучше) или списка с выбором в админке?


И вот 2 вопроса глобальных осталось:
1) два меню одинаковых для head и foot, у head выпадающий список должен быть, а вот в foot не должно быть.
Header
	<!-- Header menu -->
<xsl:template match="udata[@module = 'menu']" mode="info-pages-head">
<nav class="menu">
<ul class="blockeasing">
<xsl:apply-templates select="item" mode="info-pages-head" />
</ul>
</nav>
</xsl:template>

<xsl:template match="udata[@module = 'menu']/item" mode="info-pages-head">
<li>
<a href="{@link}"><xsl:value-of select="." /></a>
            <xsl:apply-templates select="document(concat('udata://content/menu/0/2/', @id))/udata" mode="drop" />
</li>
</xsl:template>

    <xsl:template match="udata" mode="drop" />

<xsl:template match="udata[items]" mode="drop">
<div class="menu__drop">
    <div class="menu__wrap">
    <ul>
<xsl:apply-templates select="items/item" mode="drop" />
    </ul>
    </div>
</div>
</xsl:template>

<xsl:template match="item" mode="drop">
<li><a href="{@link}"><xsl:value-of select="@name" /></a></li>
</xsl:template>

Footer
	<!-- Footer menu --> 
<xsl:template match="udata[@module = 'menu']" mode="info-pages-foot">
<nav class="menu_foot">
<ul>
<xsl:apply-templates select="item" mode="info-pages-head" />
</ul>
</nav>
</xsl:template>

<xsl:template match="udata[@module = 'menu']/item" mode="info-pages-foot">
<li>
<a href="{@link}">
<xsl:value-of select="." />
</a>
</li>
</xsl:template>


2) И разбивка на списки (ul) внутри выпадающего меню.
например, можно ли приписать условия разбивки к классу выпадающего меню?

Я нашла вот такой код.
Кто может объяснить, как он работает? Как поняла он в выпадающем меню разбивает пункты в несколько ul.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet SYSTEM "ulang://i18n/constants.dtd:file">

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:umi="http://www.umi-cms.ru/TR/umi">

    <xsl:variable name="max" select="4"/>

    <xsl:template match="udata" mode="left-list">
        <xsl:apply-templates select="items" mode="left-list"/>
    </xsl:template>

    <xsl:template match="items" mode="left-list">
        <nav class="menu-top-block">
            <ul class="menu-top"
                umi:element-id="{../@category-id}"
                umi:region="list"
                umi:sortable="sortable"
                umi:module="catalog">
                <xsl:call-template name="left-list">
                    <xsl:with-param name="items" select="current()" />
                </xsl:call-template>
            </ul>
        </nav>
    </xsl:template>

    <xsl:template name="left-list">
        <xsl:param name="items" />
        <xsl:param name="start">1</xsl:param>
        <xsl:param name="limit">4</xsl:param>
       
        <xsl:variable name="next" select="$start + $limit" />

        <li>
            <ul>
                <xsl:apply-templates select="$items/item[position() &gt;= $start and position() &lt; $next]" mode="left-list" />
            </ul>
        </li>
       
        <xsl:if test="count(items/item) &lt; $next">
            <xsl:call-template name="left-list">
                <xsl:with-param name="items" select="$items" />
                <xsl:with-param name="start" select="$next" />
                <xsl:with-param name="limit" select="$limit" />
            </xsl:call-template>
        </xsl:if>
    </xsl:template>

    <xsl:template match="items/item" mode="left-list">

        <li>
            <a href="{@link}">
                <img src="{document(concat('upage://', @id, '.menu_pic'))/udata/property/value}" alt=""/>
                <div class="text">
                    <span>
                        <xsl:value-of select="."/>
                    </span>
                </div>
            </a>

            <xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/default/', @id, '/0/1?expire=600'))/udata" mode="left-sublist"/>
        </li>
    </xsl:template>

    <xsl:template match="items/item" mode="left-sublist">

        <li>
            <a href="{@link}">
                <span class="submenu-icon-{@id}"></span>
                <span class="stext">
                    <xsl:value-of select="."/>
                </span>
            </a>
        </li>

    </xsl:template>


    <xsl:template match="udata" mode="left-sublist">
        <ul class="submenu-{@category-id}">
            <xsl:apply-templates select="items" mode="left-sublist"/>
        </ul>

    </xsl:template>

</xsl:stylesheet>

*

Sumrakrnd

  • ****
  • 311
  • +1/-0
  • Учусь «на примерах»
    • Просмотр профиля
Re: Два меню на странице, 2-х и 3-х уровневое
« Ответ #24 : 17 Февраля 2016, 14:01:14 »
Ой... я только заметила, у меня почему-то пропало третье выпадающее меню, вчера не обратила внимание (((
Он был до того, как добавился choose (

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

    <xsl:template match="udata[@module = 'menu']/item"  mode="top_menu">
<li class="tab">
<span>
<xsl:choose>
<xsl:when test="position() = 2"><xsl:attribute name="class">clinical</xsl:attribute></xsl:when>
<xsl:when test="position() = 4"><xsl:attribute name="class">cosmetology</xsl:attribute></xsl:when>
<xsl:when test="position() = 6"><xsl:attribute name="class">plastic_surgery</xsl:attribute></xsl:when>
<xsl:when test="position() = 8"><xsl:attribute name="class">stomatology</xsl:attribute></xsl:when>
</xsl:choose>
<xsl:value-of select="." />
</span>
<xsl:apply-templates select="document(concat('udata://content/menu/0/2/', @id))/udata" mode="top_drop">
   <xsl:with-param name="position" select="position()" />
</xsl:apply-templates>
</li>
    </xsl:template>

    <xsl:template match="udata" mode="top_drop" />

    <xsl:template match="udata[items]" mode="top_drop">
        <xsl:param name="position" />
<div class="tab-content">
<div>
<xsl:choose>
<xsl:when test="$position = 2"><xsl:attribute name="class">menu__wrap row-4</xsl:attribute></xsl:when>
<xsl:when test="$position = 4"><xsl:attribute name="class">menu__wrap row-3x3</xsl:attribute></xsl:when>
<xsl:when test="$position = 6"><xsl:attribute name="class">menu__wrap row-3x3</xsl:attribute></xsl:when>
<xsl:when test="$position = 8"><xsl:attribute name="class">menu__wrap row-3x4</xsl:attribute></xsl:when>
</xsl:choose>
<ul>
<xsl:apply-templates select="items/item" mode="top_drop" />
</ul>
</div>
</div>
    </xsl:template>

<xsl:template match="item" mode="top_drop">
<li>
<a href="{@link}"><xsl:value-of select="@name" /></a>
<xsl:apply-templates select="items/item" mode="top_drop3" />
</li>
</xsl:template>
   
<xsl:template match="udata" mode="top_drop3" />

<xsl:template match="item" mode="top_drop3">
<span class="polygon"></span>
<div class="under_menu">
<div class="block-info">
<div class="list-services">
<a href="{@link}"><xsl:value-of select="@name" /></a>
</div>
</div>
</div>
</xsl:template>

*

Sumrakrnd

  • ****
  • 311
  • +1/-0
  • Учусь «на примерах»
    • Просмотр профиля
Re: Два меню на странице, 2-х и 3-х уровневое
« Ответ #25 : 17 Февраля 2016, 15:06:03 »
оо.... странно, для главной страницы нет выпадающего меню третьего, а для остальных всех есть... это как так?

Вызываю его вот так:
			<!-- Menu -->
<xsl:choose>
<xsl:when test="result/page/@is-default='1'">
<nav class="menu_dop">
<ul class="tabs">
<xsl:apply-templates select="document('udata://menu/draw/1307')" mode="top_menu"/>
</ul>
</nav>
</xsl:when>
<xsl:when test="result/page/@id= '245'">
</xsl:when>
<xsl:otherwise>
<nav class="menu_dop inner-menu_dop">
<ul class="tabs">
<xsl:apply-templates select="document('udata://menu/draw/1307')" mode="top_menu"/>
</ul>
</nav>
</xsl:otherwise>
</xsl:choose>
<!-- /Menu -->

P.S.: ошиблась, не для внутренних, третье всплывающее окно появляется тогда, когда находишься на той странице, у которой должно появиться третий уровень, а он должен быть доступен для всех страниц
« Последнее редактирование: 17 Февраля 2016, 15:38:33 от Sumrakrnd »

*

Sumrakrnd

  • ****
  • 311
  • +1/-0
  • Учусь «на примерах»
    • Просмотр профиля
Re: Два меню на странице, 2-х и 3-х уровневое
« Ответ #26 : 19 Февраля 2016, 19:42:14 »
Попробовала сделать в выпадающем меню после определенного количества элементов создавалась новая колонка.
Но у меня меню больше не отображается (

    <xsl:variable name="max" select="4"/>

    <xsl:template match="udata" mode="info-pages-head">
<xsl:apply-templates select="items" mode="info-pages-head" />
    </xsl:template>

    <xsl:template match="items" mode="info-pages-head">
<nav class="menu">
<ul class="blockeasing"
                umi:element-id="{../@id}"
                umi:region="list"
                umi:sortable="sortable"
                umi:module="catalog">
                <xsl:call-template name="info-pages-head">
                    <xsl:with-param name="items" select="current()" />
                </xsl:call-template>
            </ul>
        </nav>
    </xsl:template>

    <xsl:template name="info-pages-head">
        <xsl:param name="items" />
        <xsl:param name="start">1</xsl:param>
        <xsl:param name="limit">4</xsl:param>
       
        <xsl:variable name="next" select="$start + $limit" />

        <li>
<div class="menu__drop">
<div class="menu__wrap">
<ul>
<xsl:apply-templates select="$items/item[position() &gt;= $start and position() &lt; $next]" mode="info-pages-head" />
</ul>
</div>
</div>
        </li>
       
        <xsl:if test="count(items/item) &lt; $next">
            <xsl:call-template name="info-pages-head">
                <xsl:with-param name="items" select="$items" />
                <xsl:with-param name="start" select="$next" />
                <xsl:with-param name="limit" select="$limit" />
            </xsl:call-template>
        </xsl:if>
    </xsl:template>

    <xsl:template match="items/item" mode="info-pages-head">

        <li>
            <a href="{@link}">
<xsl:value-of select="."/>
</a>

            <xsl:apply-templates select="document(concat('udata://content/menu/0/2/', @id))/udata" mode="drop" />
        </li>
    </xsl:template>

    <xsl:template match="items/item" mode="drop">

        <li>
            <a href="{@link}">
<xsl:value-of select="@name"/>
            </a>
        </li>

    </xsl:template>


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

    </xsl:template>