<?=$this->render($this->macros('menu', 'draw', array('hmenu')), 'menu/hmenu')?>
Выводит меню по его идентификатору.
XML-ответ UData
<udata module="menu" method="draw" generation-time="0.009334">
<item rel="page" id="37" is-active="1" is-deleted="0" link="/akcii/" name="Акции">Акции
<items>
<item rel="page" id="39" is-active="1" is-deleted="0" link="/garanty/" name="Гарантия">Гарантия</item>
<item rel="page" id="38" is-active="1" is-deleted="0" link="/payment/" name="Оплата">Оплата</item>
</items>
</item>
<item rel="page" id="375" is-active="1" is-deleted="0" link="/test_menu/" name="test_menu">test menu
<items>
<item rel="page" id="40" is-active="1" is-deleted="0" link="/contacts/" name="Контакты">Контакты</item>
</items>
</item>
<item rel="system" link="/user/registrate/" name="Регистрация">Регистрация</item>
<item rel="system" link="/user/login/" name="Авторизация">Авторизация</item>
<item rel="custom" link="http://google.ru" name="Произвольная ссылка">Произвольная ссылка</item>
<item rel="page" id="377" is-active="1" is-deleted="0" link="/test_menu_xslt/" name="test_menu_xslt">test menu xslt
<items>
<item rel="page" id="168" is-active="1" is-deleted="0" link="/delivery/" name="Доставка">Доставка</item>
</items>
</item>
</udata>
Элементы и атрибуты
<item>
Элемент, описывающий отдельный пункт меню.
- @rel
-
Строковый идентификатор типа пункта меню.
- "page" - тип пунктов меню, созданных на основе страниц из структуры;
- "system" - тип пунктов меню, созданных на основе системных страниц;
- "custom" - тип пунктов меню, созданных на основе произвольных ссылок;
- @id
-
id страницы, актуально для страниц типа "page".
- @is-active
-
статус, определяющий включена ли страница, актуально для страниц типа "page".
- @is-deleted
-
статус, определяющий помещена ли страница в корзину, актуально для страниц типа "page".
- @link
-
Путь до страницы.
- @name
-
Название пункта меню.
- @status
-
наличие этого атрибута со значением "active" указывает, что данный пункт меню является активным.
Пример xslt-шаблона для вывода многоуровневого меню
<xsl:template match="udata[@module = 'menu' and @method = 'draw']|items" mode="test_menu">
<ul class="test-menu">
<xsl:apply-templates select="item" mode="test_menu"/>
</ul>
</xsl:template>
<xsl:template match="item" mode="test_menu">
<li>
<a href="{@link}" title="{@name}" class="title"><xsl:value-of select="@name" /></a>
<xsl:apply-templates select="items[item]" mode="test_menu"/>
</li>
</xsl:template>
<xsl:template match="item[@status='active']" mode="test_menu">
<li>
<xsl:value-of select="@name"/>
<xsl:apply-templates select="items[item]" mode="test_menu"/>
</li>
</xsl:template>
<xsl:template match="item[@is-active='0']" mode="test_menu"/>
Вывод меню осуществляется по шаблону, указанному в параметре template. Вы можете не указывать этот параметр, в этом случае для вывода свойства будет использован шаблон по умолчанию — default.tpl
.
Используемые шаблоны
Макрос оперирует шаблонами, находящимися в каталоге /tpls/menu/. Обратите внимание: для работы макроса нужно сначала создать этот каталог с файлом шаблона. Пример шаблона указан в разделе "Примеры использования" на этой странице.
Используемые блоки шаблона
menu_block_levelX
Выводит обрамляющий блок для вывода меню, куда будут подставляться пункты меню. Пункты меню будут отрисованы по блокам шаблона menu_line_levelX и menu_line_levelX_a. «X» в названии блока обозначает номер уровня меню, для которого будет использоваться этот блок.
- %lines%
-
Выводит список пунктов меню, отрисованных с помощью блоков menu_line_levelX и menu_line_levelX_a.
- %id%
-
Выводит id страницы, которая является корневой для текущего уровня меню.
menu_line_levelX
Выводит отдельный пункт меню в том случае, когда выводимая страница неактивна (т.е. не является текущей страницей и не является родительской страницей по отношению к текущей странице). Страницы, у которых не стоит не выбрана опция "Отображать в меню", отображены в меню не будут, так же как и страницы, к которым нет доступа у текущего пользователя. «X» в названии блока обозначает номер уровня меню, для которого будет использоваться этот блок.
- %rel%
-
Выводит тип пункта меню.
- page - тип пунктов меню, созданных на основе страниц из структуры;
- system - тип пунктов меню, созданных на основе системных страниц;
- custom - тип пунктов меню, созданных на основе произвольных ссылок;
- %id%
-
Выводит id пункта меню, данный атрибут выводится только при @rel='page'.
- %text%
-
Выводит название пункта меню.
- %link%
-
Выводит ссылку на пункт меню.
- %num%
-
Порядковый номер страницы в выводе, считается для каждого уровня меню отдельно (1, 2, 3, 4, ...).
- %sub_menu%
-
Выводит подменю следующего уровня в том случае, если для него заданы блоки в шаблоне.
- %separator%
-
Выводит разделитель между пунктами меню, если он описан в блоке separator_levelX или separator_last_levelX.
- %class%
-
Выводит CSS-класс для пункта меню, используя блок menu_class_levelX или menu_class_levelX_last.
menu_line_levelX_a
Отвечает за вывод отдельного пункта меню в том случае, когда выводимая страница активна (т.е. является текущей страницей или является родительской страницей по отношению к текущей странице). «X» в названии блока обозначает номер уровня меню, для которого будет использоваться этот блок.
- %rel%
-
Выводит тип пункта меню.
- page - тип пунктов меню, созданных на основе страниц из структуры;
- system - тип пунктов меню, созданных на основе системных страниц;
- custom - тип пунктов меню, созданных на основе произвольных ссылок;
- %id%
-
Выводит id пункта меню, данный атрибут выводится только при @rel='page'.
- %text%
-
Выводит название пункта меню.
- %link%
-
Выводит ссылку на пункт меню.
- %num%
-
Порядковый номер страницы в выводе, считается для каждого уровня меню отдельно (1, 2, 3, 4, ...).
- %sub_menu%
-
Выводит подменю следующего уровня в том случае, если для него заданы блоки в шаблоне.
- %separator%
-
Выводит разделитель между пунктами меню, если он описан в блоке separator_levelX или separator_last_levelX.
- %class%
-
Выводит CSS-класс для пункта меню, используя блок menu_class_levelX или menu_class_levelX_last.
menu_class_levelX
Выводит CSS-класс для всех пунктов меню, кроме последнего. Можно использовать в блоках menu_line_levelX и menu_line_levelX_a для стилевого оформления пункта меню. «X» в названии блока обозначает номер уровня меню, для которого будет использоваться этот блок.
menu_class_levelX_last
Выводит CSS-класс только для последнего пункта меню. Можно использовать в блоках menu_line_levelX и menu_line_levelX_a для стилевого оформления пункта меню. «X» в названии блока обозначает номер уровня меню, для которого будет использоваться этот блок.
separator
Содержит разделитель, который можно вывести в блоках menu_line_levelX и menu_line_levelX_a для разделения пунктов меню.
separator_last
Содержит разделитель, который будет выводится последним в блоках menu_line_levelX и menu_line_levelX_a.
Примеры использования
В папке /tpls/menu
создайте файл default.tpl
и поместите в него следующий код:
<?php
$FORMS = Array();
$FORMS['menu_block_level1'] = <<<END
<ul id="menu" >%lines%</ul>
END;
$FORMS['menu_line_level1'] = <<<END
<li class="%class%"><a href="%link%" umi:field-name="name">%text%</a>%separator% %sub_menu%</li>
END;
$FORMS['menu_line_level1_a'] = <<<END
<li class="%class% active"><a href="%link%" umi:field-name="name">%text%</a>%separator%%sub_menu%</li>
END;
$FORMS['menu_block_level2'] = <<<END
<ul id="menu" >%lines%</ul>
END;
$FORMS['menu_line_level2'] = <<<END
<li><a href="%link%" umi:field-name="name">%text%</a>%separator%%sub_menu%</li>
END;
$FORMS['menu_line_level2_a'] = <<<END
<li class="active"><a href="%link%" umi:field-name="name">%text%</a>%separator%%sub_menu%</li>
END;
$FORMS['menu_block_level3'] = <<<END
<ul id="menu" >%lines%</ul>
END;
$FORMS['menu_line_level3'] = <<<END
<li><a href="%link%" umi:field-name="name">%num% %text%</a>%sub_menu%</li>
END;
$FORMS['menu_line_level3_a'] = <<<END
<li class="active"><a href="%link%" umi:field-name="name">%num% %text%</a>%sub_menu%</li>
END;
$FORMS['separator_level1'] = <<<END
(разделитель первого уровня)
END;
$FORMS['separator_last_level1'] = <<<END
(последний разделитель первого уровня)
END;
$FORMS['separator_level2'] = <<<END
(разделитель второго уровня)
END;
$FORMS['separator_last_level2'] = <<<END
(последний разделитель второго уровня)
END;
$FORMS['menu_class_level1'] = <<<END
level1
END;
$FORMS['menu_class_level1_last'] = <<<END
level1_last
END;
?>
Название
%menu draw()% — Выводит меню на сайте.