Логотип

Документация по макросам и шаблонам UMI.CMS

menu draw()

Название

%menu draw()% — Выводит меню на сайте.

Параметры: menu draw(menuId, [template = 'default'])

menuId

Id объекта или строковый идентификатор меню, которое необходимо вывести.

template

Имя шаблона, по которому следует вывести меню. В XSLT-шаблонизаторе игнорируется, можно указать любое значение.

Описание

Макрос выводит меню с идентификатором, указанным в параметре menuId.

<?=$this->render($this->macros('menu', 'draw', array('hmenu')), 'menu/hmenu')?>

Выводит меню по его идентификатору.

Пример вызова

udata://menu/draw/613

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>  

Элементы и атрибуты

<items>

Ветвь меню, содержащая элементы item второго и последующих уровней.

<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;
?>