UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: Sumrakrnd от 12 Февраля 2016, 11:36:30

Название: Два меню на странице, 2-х и 3-х уровневое
Отправлено: Sumrakrnd от 12 Февраля 2016, 11:36:30
Привет всем!
Я уже создавала тему html в xslt, но тут возник вопрос по сложнее, по крайне мере облазив форум, я такого типа темы не нашла, либо они были раскрыты не полностью.
У меня есть главное меню и есть меню каталога, соответственно надо обратиться ж к списку каталога, так? Хотя пока не знаю как к нему обратиться.
Главное меню у меня в добавок ко всему есть и в шапке и футере, при том у меню в футере выпадающего меню не должно быть.

У второго меню есть особенность для главной страницы у него один класс menu_dop, для всех остальных должен добавляться еще один класс menu_dop_inner, там немного меняется размер меню, для страницы контактов это меню должно быть отключено полностью.

Я так и не нашла нигде, как сделать такие запросы, хотя может банально не знаю, что именно надо искать.

1. Меню главное реализовано вот так. Проблема тут по сути только одна, выпадающая плашка появляется у всех пунктов, хотя должен быть только у того, в котором есть вложенные страницы.
P.S.: Кстати, странно, когда я навожу на подпункты, сейчас их там три, они выделяются как единая ссылка.
	<!-- 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>
<div class="menu__drop">
<div class="menu__wrap">
<ul>
<li><a href="{@link}"><xsl:apply-templates select="document(concat('udata://content/menu/0/2/', @id))/udata[items/item]" /></a></li>
</ul>
</div>
</div>
</li>
</xsl:template>

<xsl:template match="udata[@module = 'menu']/item[@status= 'active']" mode="menu">
<li class="active">
<a href="{@link}">
<xsl:value-of select="node()" />
</a>
</li>
</xsl:template>

<xsl:template match="udata[@module = 'menu']/item[@link = '/help/']" mode="info-pages-head">
<li>
<a href="{@link}" class="help">
<xsl:value-of select="node()" />
</a>
</li>
</xsl:template>

А вот в футуре не должны подгружаться выпадающие, вроде стоит node, я так поняла, это что-то вроде окончания? Просто описания не нашла(
	
<!-- 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="node()" />
</a>
</li>
</xsl:template>

2. А вот второе меню, я не очень понимаю, как надо вызвать ссылки из каталога, я одну нашла здесь статью, но данная там ссылка уже отсутствует (((
Хотя на самом деле проблема в том, как реализовать первый уровень меню...

Вызывается блок меню пока вот так:
<xsl:apply-templates select="document('udata://content/menu/0/2/')/udata" mode="menu1"/>

Это как выглядит в шаблоне
<xsl:template match="udata[@module = 'content'][@method = 'menu']" mode="menu1">
<nav class="menu_dop">

<div class="tabs">
<input id="tab1" type="radio" name="tabs" checked="checked" />
<label for="tab1" title="Вкладка 1" class="clinical">Тест1</label>

<input id="tab2" type="radio" name="tabs" />
<label for="tab2" title="Вкладка 2" class="cosmetology">Тест2</label>

<input id="tab3" type="radio" name="tabs" />
<label for="tab3" title="Вкладка 3" class="plastic_surgery">Тест3</label>

<input id="tab4" type="radio" name="tabs" />
<label for="tab4" title="Вкладка 4" class="stomatology">Тест4</label>

<section id="content1">
<div class="menu__wrap row-4">
<ul>
<li><a href="ophthalmology.html">Вариант1</a></li>
<li><a href="#">Вариант1</a></li>
<li><a href="#">Вариант1</a></li>
<li><a href="#">Вариант1</a></li>
</ul>
<ul>
<li><a href="#">Вариант1</a></li>
<li><a href="#">Вариант1</a></li>
<li><a href="#">Вариант1<span class="new"></span></a></li>
</ul>

</div>
</section> 
<section id="content2">
<div class="menu__wrap row-3x3">
<ul>
<li><a href="#">Вариант2</a></li>
<li><a href="#">Вариант2</a></li>
<li><a class="menu__drop__link" href="#">Вариант2<span class="new"></span></a></li>
</ul>
<ul>
<li><a href="#">Вариант2</a></li>
<li><a href="#">Вариант2</a></li>
<li><a href="#">Вариант2</a></li>
</ul>
<ul>
<li><a href="#">Вариант2</a></li>
</ul>
</div>
</section>
<section id="content3">
<div class="menu__wrap row-3x3">
<ul>
<li><a href="#">Вариант3</a></li>
<li><a href="#">Вариант3</a>
<span class="polygon"></span>
<div class="under_menu">
<div class="block-link">
<span><a href="#" class="orange">Акции</a></span>
<span><a href="#" class="blue">Цены</a></span>
<span><a href="#" class="grey">Вариации</a></span>
</div>
<div class="block-info">
<div class="list-services">
<a href="#">Вариант3-1</a>
<a href="#">Вариант3-1</a>
<a href="#">Вариант3-1</a>
<a href="#">Вариант3-1</a>
<a href="#">Вариант3-1</a>
<a href="#">Вариант3-1</a>
<a href="#">Вариант3-1</a>
</div>
<div class="carousel-container">
<ul class="carousel">
<li>
<img src="upload/spec1.png" alt="" />
<big>Имя</big>
<small>Фамилия</small>
<a href="#win1" class="apply">записаться</a>
</li>
<li>
<img src="upload/spec2.png" alt="" />
<big>Имя</big>
<small>Фамилия</small>
<a href="#win1" class="apply">записаться</a>
</li>
<li>
<img src="upload/spec3.png" alt="" />
<big>Имя</big>
<small>Фамилия</small>
<a href="#win1" class="apply">записаться</a>
</li>
<li>
<img src="upload/spec4.png" alt="" />
<big>Имя</big>
<small>Фамилия</small>
<a href="#win1" class="apply">записаться</a>
</li>
<li>
<img src="upload/spec5.png" alt="" />
<big>Имя</big>
<small>Фамилия</small>
<a href="#win1" class="apply">записаться</a>
</li>
<li>
<img src="upload/spec6.png" alt="" />
<big>Имя</big>
<small>Фамилия</small>
<a href="#win1" class="apply">записаться</a>
</li>
<li>
<img src="upload/spec7.png" alt="" />
<big>Имя</big>
<small>Фамилия</small>
<a href="#win1" class="apply">записаться</a>
</li>
<li>
<img src="upload/spec8.png" alt="" />
<big>Имя</big>
<small>Фамилия</small>
<a href="#win1" class="apply">записаться</a>
</li>
<li>
<img src="upload/spec9.png" alt="" />
<big>Имя</big>
<small>Фамилия</small>
<a href="#win1" class="apply">записаться</a>
</li>
</ul>
<button class="prev"></button>
<button class="next"></button>
</div>
</div>
</div>
</li>
<li><a href="#">Вариант3</a></li>
</ul>
<ul>
<li><a href="#">Вариант3</a></li>
<li><a href="#">Вариант3</a></li>
<li><a href="#">Вариант3</a></li>
</ul>
</div>
</section>
<section id="content4">
<div class="menu__wrap row-3x4">
<ul>
<li><a href="#">Вариант4</a></li>
<li><a href="#">Вариант4</a></li>
<li><a href="#">Вариант4</a></li>
<li><a href="#">Вариант4</a></li>
</ul>
<ul>
<li><a href="#">Вариант4</a></li>
<li><a href="#">Вариант4</a></li>
<li><a href="#">Вариант4<span class="new"></span></a></li>
<li><a href="#">Вариант4</a></li>
</ul>
</div>
</section>
</div>
</nav>
</xsl:template>

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

<xsl:template match="item[@status = 'active']" mode="menu1">
<li>
<a href="{@link}" class="active">
<xsl:value-of select="@name"/>
</a>
</li>
</xsl:template>
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: Sumrakrnd от 12 Февраля 2016, 12:41:25
Ура! Я смогла сделать, чтобы выпадало меню только у того пункта, в котором есть вложенные страницы.
Только теперь у этого пункта почему начал подтягиваться его id О_О"
И осталась проблема, что у нижнего идет отображение подпунктов...
	<!-- 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[items/item]" mode="menu_sub" />
</li>
</xsl:template>

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

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

Кстати, у меня выпадающее меню сделано из нескольких ul-ов, есть схема заполнения такого меню? ><
			<li class="main"><a href="#">О компании</a>
<div class="menu__drop">
<div class="menu__wrap">
<ul>
<li><a href="#">правовая информация</a></li>
<li><a href="#">как мы работаем</a></li>
<li><a href="#">вакансии</a></li>
</ul>
<ul>
<li><a href="#">отзывы</a></li>
<li><a href="#">статьи</a></li>
<li><a href="#">новости</a></li>
</ul>
<ul class="spec_predl">
<li><a href="#" class="purple">специалисты</a></li>
<li><a href="#" class="blue">цены</a></li>
<li><a href="#" class="green">Записаться?</a></li>
</ul>
</div>
</div>
</li>
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: Sumrakrnd от 12 Февраля 2016, 16:54:45
Благодаря, crazygeorgio, получилось такое вот такое меню, реально быстрее работает.

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

Осталась проблема того, что в этом же меню, только для футера, тоже цепляется второй уровень....

А кто может объяснить, как работает этот код? Просто хочу попробовать его прикрутить к меню, т.к. у меня тоже в li меню разбивается на несколько 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>
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: Sumrakrnd от 12 Февраля 2016, 17:25:03
У меня вопрос, я сделала такой запрос:
			<xsl:choose>
<xsl:when test="result/page/@is-default='1'">
<nav class="menu_dop">
<xsl:apply-templates select="document('udata://content/menu/0/2/')/udata" mode="menu1"/>
</nav>
</xsl:when>
<xsl:otherwise>
<nav class="menu_dop inner-menu_dop">
<xsl:apply-templates select="document('udata://content/menu/0/2/')/udata" mode="menu1"/>
</nav>
</xsl:otherwise>
</xsl:choose>
Мне надо сюда поставить еще одно условие, чтобы меню не было на странице контакты, как это сделать?
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: crazygeorgio от 12 Февраля 2016, 17:56:52
проверку по id страницы сделайте
			<xsl:choose>
<xsl:when test="result/page/@is-default='1'">
<nav class="menu_dop">
<xsl:apply-templates select="document('udata://content/menu/0/2/')/udata" mode="menu1"/>
</nav>
</xsl:when>
<xsl:when test="result/page/@id= XXX "></xsl:when>
<xsl:otherwise>
<nav class="menu_dop inner-menu_dop">
<xsl:apply-templates select="document('udata://content/menu/0/2/')/udata" mode="menu1"/>
</nav>
</xsl:otherwise>
</xsl:choose>
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: Sumrakrnd от 12 Февраля 2016, 18:50:01
О.. Спасибо ^^

До меня даже что-то начало доходить  :o

Кое-какие разбивки сделала, но самое тяжелое это все-таки меню... :(


P.S.: хотела делать меню из каталога, а там цена идет как обязательное поле, придется делать свой тип данных для специалистов, так?
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: Sumrakrnd от 15 Февраля 2016, 12:12:35
Так кто нибудь может подсказать, как сделать начало второго меню?
Просто меня сбивает как это реализовать с табами и id в xslt ((
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: Sumrakrnd от 16 Февраля 2016, 13:58:56
Я немного поменяла структуру меню, избавилась от id, input и label.
Но все равно не могу понять как сделать это в xslt (((

<nav class="menu_dop">
<ul class="tabs">
<li class="tab">
<span>Тест1</span>
<div class="tab-content">
<div class="menu__wrap row-4">
<ul>
<li><a href="#">Вариант1</a></li>
<li><a href="#">Вариант1</a></li>
</ul>
<ul>
<li><a href="#">Вариант1<span class="new"></span></a></li>
</ul>
<ul>
<li><a href="#">Вариант1</a></li>
<li><a href="#">Вариант1</a></li>
<li><a href="#">Вариант1</a></li>
</ul>
<ul>
<li><a href="#">Вариант1</a></li>
</ul>
</div>
</div>
</li>
<li class="tab">
<span>Тест2</span>
<div class="tab-content">
<div class="menu__wrap row-3x3">
<ul>
<li><a href="#">Вариант2</a></li>
<li><a href="#">Вариант2</a></li>
<li><a href="#">Вариант2<span class="new"></span></a></li>
</ul>
<ul>
<li><a href="#">Вариант2</a></li>
</ul>
<ul>
<li><a href="#">Вариант2</a></li>
</ul>
</div>
</div>
</li>
<li class="tab">
<span>Тест3</span>
<div class="tab-content">
<div class="menu__wrap row-3x3">
<ul>
<li><a href="#">Вариант3</a></li>
<li><a href="#">Вариант3</a>
<span class="polygon"></span>
<div class="under_menu">
<div class="block-link">
<span><a href="#" class="orange">Акции</a></span>
<span><a href="#" class="blue">Цены</a></span>
<span><a href="#" class="grey">Варианты</a></span>
</div>
<div class="block-info">
<div class="list-services">
<a href="#">Вариант3-1</a>
<a href="#">Вариант3-1</a>
<a href="#">Вариант3-1</a>
<a href="#">Вариант3-1</a>
<a href="#">Вариант3-1</a>
</div>
<div class="carousel-container">
<ul class="carousel">
<li>
<img src="{$template-resources}upload/spec1.png" alt="" />
<big>Имя</big>
<small>Фамилия</small>
<a href="#win1" class="apply">записаться</a>
</li>
<li>
<img src="{$template-resources}upload/spec2.png" alt="" />
<big>Имя</big>
<small>Фамилия</small>
<a href="#win1" class="apply">записаться</a>
</li>
<li>
<img src="{$template-resources}upload/spec3.png" alt="" />
<big>Имя</big>
<small>Фамилия</small>
<a href="#win1" class="apply">записаться</a>
</li>
<li>
<img src="{$template-resources}upload/spec4.png" alt="" />
<big>Имя</big>
<small>Фамилия</small>
<a href="#win1" class="apply">записаться</a>
</li>
</ul>
<button class="prev"></button>
<button class="next"></button>
</div>
</div>
</div>
</li>
<li><a href="#">Вариант3</a></li>
</ul>
<ul>
<li><a href="#">Вариант3</a></li>
<li><a href="#">Вариант3</a></li>
</ul>
<ul>
<li><a href="#">Вариант3</a></li>
<li><a href="#">Вариант3</a></li>
</ul>
</div>
</div>
</li>
<li class="tab">
<span>Тест4</span>
<div class="tab-content">
<div class="menu__wrap row-3x4">
<ul>
<li><a href="#">Вариант4</a></li>
<li><a href="#">Вариант4</a></li>
</ul>
<ul>
<li><a href="#">Вариант4<span class="new"></span></a></li>
<li><a href="#">Вариант4</a></li>
</ul>
<ul>
<li><a href="#">Вариант4</a></li>
<li><a href="#">Вариант4</a></li>
</ul>
</div>
</div>
</li>
</ul>
</nav>
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: crazygeorgio от 16 Февраля 2016, 14:09:35
что нужно???
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: Sumrakrnd от 16 Февраля 2016, 14:30:42
У меня есть Страницы контента, внутри которых тоже страницы и внутри них тоже есть страницы (система дебильная, но я просто не знаю как это реализовать)
Т.е. главные четыре (для примера) расположены в <span>Тест</span>, а внутренние страницы должны быть в <div class="menu__wrap"><ul><li>...</li></ul></div>
И третье вложение
							<li><a href="#">Вариант3</a>
<span class="polygon"></span>
<div class="under_menu">
<div class="block-link">
<span><a href="#" class="orange">Акции</a></span>
<span><a href="#" class="blue">Цены</a></span>
<span><a href="#" class="grey">Варианты</a></span>
</div>
<div class="block-info">
<div class="list-services">
<a href="#">Вариант3-1</a>
<a href="#">Вариант3-1</a>
<a href="#">Вариант3-1</a>
<a href="#">Вариант3-1</a>
<a href="#">Вариант3-1</a>
</div>
<div class="carousel-container">
<ul class="carousel">
<li>
<img src="{$template-resources}upload/spec1.png" alt="" />
<big>Имя</big>
<small>Фамилия</small>
<a href="#win1" class="apply">записаться</a>
</li>
<li>
<img src="{$template-resources}upload/spec2.png" alt="" />
<big>Имя</big>
<small>Фамилия</small>
<a href="#win1" class="apply">записаться</a>
</li>
<li>
<img src="{$template-resources}upload/spec3.png" alt="" />
<big>Имя</big>
<small>Фамилия</small>
<a href="#win1" class="apply">записаться</a>
</li>
<li>
<img src="{$template-resources}upload/spec4.png" alt="" />
<big>Имя</big>
<small>Фамилия</small>
<a href="#win1" class="apply">записаться</a>
</li>
</ul>
<button class="prev"></button>
<button class="next"></button>
</div>
</div>
</div>
</li>

Я не знаю (пыталась сделать через draw):
1) как привязать страницы чтобы они выводились как меню, при том что тут совмещены табы с меню (или не важно)
2) как сделать чтобы эти страницы разбивались на несколько ul?
3) Классы row-3x4, row-3x3 и row-4 можно будет разбивать таким способом: <xsl:when test="position() = 1"><xsl:attribute name="class">menu__wrap_item row-3x4</xsl:attribute></xsl:when>


Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: crazygeorgio от 16 Февраля 2016, 14:35:15
понятнее ни разу не стало
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: Sumrakrnd от 16 Февраля 2016, 15:21:05
Надо сделать что-то типа каталога из такой структуры сайта:
- Тест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

Тип данных: страница контента.
Структуру меню в html кидала выше.

Я не могу понять:
1) как эту структуру реализовать в виде меню в XSLT?
2) как сделать разбивку на несколько ul в выпадающем меню?
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: crazygeorgio от 16 Февраля 2016, 15:49:59
а я не пойму в чем сложности-то... обычное трехуровневое меню, какая еще разбивка на ul
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: Sumrakrnd от 16 Февраля 2016, 15:54:57
Вот разбивка
<nav class="menu_dop">
<ul class="tabs">
<li class="tab">
<!--первый уровень меню-->
<span>Тест3</span>
<!--/первый уровень меню-->
<!--второй уровень меню-->
<div class="tab-content">
<div class="menu__wrap row-3x3">
<ul> <!--первое разделение на ul -->
<li><a href="#">Вариант3</a></li>
<li><a href="#">Вариант3</a>

<!--третий уровень меню-->
<span class="polygon"></span>
<div class="under_menu">
<div class="block-info">
<div class="list-services">
<a href="#">Вариант3-1</a>
<a href="#">Вариант3-1</a>
<a href="#">Вариант3-1</a>
<a href="#">Вариант3-1</a>
<a href="#">Вариант3-1</a>
</div>
</div>
</div>

<!--/третий уровень меню-->
</li>
<li><a href="#">Вариант3</a></li>
</ul>
<ul><!--второе разделение на ul -->
<li><a href="#">Вариант3</a></li>
<li><a href="#">Вариант3</a></li>
</ul>
<ul><!--третье разделение на ul -->
<li><a href="#">Вариант3</a></li>
<li><a href="#">Вариант3</a></li>
</ul>
</div>
</div>
<!--/второй уровень меню-->
</li>
</ul>
</nav>
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: crazygeorgio от 16 Февраля 2016, 15:57:23
по какому принципу разбиваются?
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: Sumrakrnd от 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
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: crazygeorgio от 16 Февраля 2016, 16:29:50
у вас все получится!;)
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: Sumrakrnd от 16 Февраля 2016, 16:32:34
Не я такое придумала Т_Т
А с umi я не работаю первый раз.. ( и с xslt тоже...><
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: Sumrakrnd от 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>
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: crazygeorgio от 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>
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: Sumrakrnd от 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, пропали повторения.


Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: Sumrakrnd от 16 Февраля 2016, 19:07:20
Кстати, вот если у меня появляется новый пункт меню, ему например добавить надо маленький блок или класс, отмечающий что он новый.

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

А в Umi это как реализовать? И можно ли?
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: crazygeorgio от 16 Февраля 2016, 21:06:28
а вот так не сделать???
https://yandex.ru/yandsearch?clid=2186618&text=xslt%20position%28%29
https://yandex.ru/search/?text=xslt%20with-param&lr=2&clid=2186618
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: Sumrakrnd от 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>
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: Sumrakrnd от 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>
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: Sumrakrnd от 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.: ошиблась, не для внутренних, третье всплывающее окно появляется тогда, когда находишься на той странице, у которой должно появиться третий уровень, а он должен быть доступен для всех страниц
Название: Re: Два меню на странице, 2-х и 3-х уровневое
Отправлено: Sumrakrnd от 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>