Привет всем!
Я уже создавала тему 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>
Ура! Я смогла сделать, чтобы выпадало меню только у того пункта, в котором есть вложенные страницы.
Только теперь у этого пункта почему начал подтягиваться его 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>
Благодаря, 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() >= $start and position() < $next]" mode="left-list" />
</ul>
</li>
<xsl:if test="count(items/item) < $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>
У меня вопрос, я сделала такой запрос:
<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>
Мне надо сюда поставить еще одно условие, чтобы меню не было на странице контакты, как это сделать?
проверку по 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>
Я немного поменяла структуру меню, избавилась от 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>
У меня есть Страницы контента, внутри которых тоже страницы и внутри них тоже есть страницы (система дебильная, но я просто не знаю как это реализовать)
Т.е. главные четыре (для примера) расположены в <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>
Вот разбивка
<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>
Вот такая вещь у меня получилась вроде даже работает.
Только вот не привязываются классы... идет только первый, а все остальные не подтягиваются к другим (
Хотя с фоновыми картинками для 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>
<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>
Простите, честно вчера пригружена уже была этой задачей>< поэтому сразу и спросила, не подумав поискать
А насчет реализации чекбокса(это было бы лучше) или списка с выбором в админке?
И вот 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() >= $start and position() < $next]" mode="left-list" />
</ul>
</li>
<xsl:if test="count(items/item) < $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>
Ой... я только заметила, у меня почему-то пропало третье выпадающее меню, вчера не обратила внимание (((
Он был до того, как добавился 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>
оо.... странно, для главной страницы нет выпадающего меню третьего, а для остальных всех есть... это как так?
Вызываю его вот так:
<!-- 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.: ошиблась, не для внутренних, третье всплывающее окно появляется тогда, когда находишься на той странице, у которой должно появиться третий уровень, а он должен быть доступен для всех страниц
Попробовала сделать в выпадающем меню после определенного количества элементов создавалась новая колонка.
Но у меня меню больше не отображается (
<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() >= $start and position() < $next]" mode="info-pages-head" />
</ul>
</div>
</div>
</li>
<xsl:if test="count(items/item) < $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>