%structure.menu()%

На печать

%structure.menu()% – Формирует меню сайта, различного уровня вложенности.

В меню сайта выводятся только активные страницы, у которых стоит галочка «Выводить в меню» и имеются соответствующие права доступа для текущего пользователя. Так же следует учитывать, что при формировании меню участвуют только те страницы, ORM-классы которых указаны в настройках модуля на вкладке "Управление отображением".

Логику работы макроса %structure.menu()% можно повторить с помощью вложенного вызова макроса %structure.objList()%. Но этого не следует делать, т.к. при каждом вызове макроса %structure.objList()% выполняются запросы к БД. Количество запросов в этом случае растет в зависимости от количества разделов меню и глубины их вложенности. При работе с макросом %structure.menu()% дополнительных запросов не выполняется, вне зависимости от количества используемых меню на сайте, количества разделов или их вложенности. 


%structure.menu([templ_name = default, max_level = 0, section_id = 0, max_count = 0])%


templ_name

Шаблон оформления меню. Шаблоны находятся в папке /template/structure/menu. По умолчанию используется шаблон default.

max_level

Максимальное количество уровней вложенности допустимых в меню. По умолчанию 0, т.е. без ограничений.

section_id

ID раздела с которого необходимо начать вывод меню. По умолчанию 0, т.е. вывод начинается с корня меню. Так же можно использовать селекторы.

max_count

Максимальное количество элементов в меню. Если указано 0 - без ограничений


Структура шаблона


Шаблоны находятся в папке /template/structure/menu. По умолчанию используется шаблон default.

Шаблоны меню могут иметь сложную, многоуровневую структуру. Для каждого уровня вложенности может быть указано свое оформление.

По умолчанию меню начинает формироваться на основе блоков первого уровня. Для каждого последующего уровня берутся соответствующие блоки. Если блоков с нужным уровнем нет, используется оформления последнего описанного уровня. Таким образом, на основе одноуровневого шаблона, можно сформировать меню не ограниченного уровня вложенности, для этого в каждом блоке list и list_active должен быть указан макрос .

На каждом уровне вложенности есть блоки оформления.

frame

Выводит обрамление для пунктов меню. Сюда подставятся элементы списка, оформленные по блокам list и list_active. Для вывода списка страниц используйте макрос %list%.

list

Оформление неактивного пункта меню. В блоке используются следующие внутренние макросы:

%sub_menu%

Вывод подразделов меню. Только в том случае, если у страницы стоит галочка «Показывать подменю». Подразделы выводятся в оформлении блока frame.

%obj.id%

ID страницы

%obj.name%

Имя страницы

%obj.url%

URL страницы

%obj.h1%

Заголовок H1 для страницы

%obj.title%

Заголовок окна страницы

%obj.target%

Вернет «target=”_blank”», если у страницы стоит галочка «Открывать в новом окне».

%obj.img_h1%

Вернет рисунок для заголовка страницы.

%obj.img_act%

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

%obj.img_no_act%

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

   

%obj.num%

Номер страницы по порядку в списке страниц.

%class-first%

Вернет «first», если страница является первой в списке. Используется для генерации имен для CSS классов.

%class-last%

Вернет «last», если страница является последней в списке. Используется для генерации имен для CSS классов.

%class-odd%

Вернет «odd», если порядковый номер страницы четный. Используется для генерации имен для CSS классов.

%class-even%

Вернет «even», если порядковый номер страницы нечетный. Используется для генерации имен для CSS классов.

%class-third% Вернет «third», для каждой третьей страницы в списке. Используется для генерации имен для CSS классов.

 

Возможно использовать уточнение по классу объекта. Например, возможны такие названия блоков:

 

list_active

Оформление активного пункта меню. Активным пунктом меню считается текущая страница и все родительские разделы, в которые она входит. Список внутренних макросов точно такой же, как у блока list.

Возможно использовать уточнение по классу объекта. Например, возможны такие названия блоков:

 

separator

Необязательный блок. Если есть, выводит визуальный разделитель между выводом блоков active и no_active. Каких либо специальных встроенных макросов не имеет.


Примеры



Пример 1

Файл шаблона меню имеет четыре основных блока, описанных в виде PHP массива $TEMPLATE, в котором level_number – это номер уровня, для которого указывается оформление.

<?php

$TEMPLATE[level_number]['frame'] = <<<END
<ul id="cssmenu">
	%list%
</ul>
END;

$TEMPLATE[level_number]['list_active'] = <<<END
<li>
    <a class="active" href="%obj.url%">%obj.name%<ins></ins></a>
    %sub_menu%
</li>
END;

$TEMPLATE[level_number]['list'] = <<<END
<li>
    <a href="%obj.url%">%obj.name%</a>
    %sub_menu%
</li>
END;

$TEMPLATE[level_number]['seporator'] = <<<END
|
END;

?>



Что-то не так? Напиши, учтем!