Ссылка на расширение и документацию модуля Extended Menu.http://de.siteof.de/extended-menu-templates.html
Цель занятия научиться писать условия языком xml. Внимание!!! Условия. Но надо въехать в тему. Например нам надо проверить наличие в li Дочерних элементов, или такое выражение, если элемент равен 6 — выводим определенный класс. Или для первого элемента вывести что вам нужно. Очень гибкий инструмент. Но надо въехать как писать условия.
1.Создаем шаблон menu.html
2. подключаем в модуле в разделе в Output пункте:
Enable Menu TemplateNo — Yes
Template Name — menu.html
3. Начинаем делать условия для конкретного пункта.
Задача: Если есть в пункте меню есть подменю то выводим нужный нам класс.
а)
находим в середине тега li.
1 2 3 4 |
<patTemplate:tmpl name="menu_item" whitespace="trim"> < Li ... ... |
добавляем к li следующий код
1 2 3 4 5 |
<li class="<patTemplate:tmpl name="condition_HAS_SUB" type="condition" conditionvar="HAS_SUB_MENU_ITEMS" varscope="menu_item" whitespace="trim"> <patTemplate:sub condition="1"> haschild </patTemplate:sub> </patTemplate:tmpl>" > |
Что значит эта каша?
Немного упростим код, покажу без li.
1 2 3 4 5 |
<patTemplate:tmpl name="condition_HAS_SUB" type="condition" conditionvar="HAS_SUB_MENU_ITEMS" varscope="menu_item" whitespace="trim"> <patTemplate:sub condition="1"> haschild </patTemplate:sub> </patTemplate:tmpl> |
conditionvar=»HAS_SUB_MENU_ITEMS» это тот же IF. По русски это звучит так, ЕСЛИ ЕСТЬ ЭЛЕМЕНТЫ ПОДМЕНЮ.
Теперь вторая часть условия. Нам надо с чем то сравнивать, значение.
condition=»1″
Это то значение которое может вернуть код HAS_SUB_MENU_ITEMS либо 1 либо 0.
Общее логическое выражение принимает вид
ЕСЛИ СУЩЕСТВОВАНИЕ ЭЛЕМЕНТОВ ПОДМЕНЮ =1
А теперь что показываем. То что в середине тега -будет выводиться при наличии дочерних элементов.
1 2 3 |
<patTemplate:sub condition="1"> haschild </patTemplate:sub> |
Дополнительная настройка
varscope=»menu_item» — показывает, что мы работает с пунктом меню.
name=»condition_HAS_SUB» — надо задать уникальное для шаблона имя- любое.
Если текущий пункт меню или любой из его детей активны(выбраны), показываю класс active. Я применил его для Li, вставив внутрь класса следующий код.
1 2 3 4 5 |
<patTemplate:tmpl name="condition_IS_ACTIVE" type="condition" conditionvar="IS_ACTIVE" varscope="menu_item" whitespace="trim"> <patTemplate:sub condition="1"> active </patTemplate:sub> </patTemplate:tmpl> |