Сегодня попытаюсь рассказать о template tag’е show_menu в django-cms. Сам разбирался с ним методом научного тыка.
{% show_menu %}
Параметры
Show_menu принимает следующие необязательные параметры:start_level - начальный уровень навигации,“Дополнительная” - это навигация по страницам, которые не являются прямыми потомками и предками текущей страницы.
end_level конечный уровень навигации,
extra_inactive – начальный уровень “дополнительной” навигации,
extra_active - конечный уровень “дополнительной” навигации
Для этого тэга можно переопределить шаблон вывода, создав в шаблонах своего проекта свой шаблон cms/menu.html или передав в ещё один дополнительный параметр template. Пример:
{% show_menu 0 100 0 100 "my_new_cool_menu.html" %}
Играемся с уровнями навигации
Для тестирования работы тэга возьмем сайт-пример demo.concepter.ru, о котором я уже писал раньше. (UPD: сайта demo.concepter.ru больше нет). Итак, имеет исходное дерево сайта:- root 1
- 1 level child (p, n)
- 2 level child (p, n) of 1
- 2 level child (p) of 1
- 1 level child (p)
- 2 level child (p, n) of 1 level child (p)
- 1 level child
- 1 level child (n)
- 1 level child (p, n)
- root 2
- 1 level child (p, n) of root 2
- 2 level child (p, n) of 1 of root 2
- 1 level child (p) of root 2
- 1 level child (p, n) of root 2
На главной странице вызваны show_menu со следующими параметрами:
1. {% show_menu 0 100 100 100 %} - Вся навигация
2. {% show_menu 0 100 0 100 %} - Навигация по активному дереву
3. {% show_menu 0 100 0 1 %} - Навигация с одним дополнительным уровнем
4. {% show_menu 0 0 0 0 %} - Корневая навигация
5. {% show_menu 1 1 100 100 %} - Навигация первого уровня
6. {% show_menu 1 1 0 100 %} - Навигация по первому уровню (только активное дерево)
7. {% show_menu 0 1 100 100 %} - Навигация по перевому и второму уровню
Независимые от активной страницы блоки навигации
Естественно, что вся навигация (1), корневая навигация (4), навигация первого уровня (5) и навигация 0-1 уровней (7) не будут меняться с изменением активной страницы (т.е. при переходе на новую страницу). Потому сразу покажу, как они выглядят для всех страниц:Complete navigation
Level 0 navigation
Level 1 navigation
Level 0-1 navigation
Навигацию по активному дереву
{% show_menu 0 100 0 100 %}
1. root 1
2. root 2
Активное дерево развернуто, а не активное – нет. В навигации все страницы с параметрами страница “опубликована” и “в навигации”.
Навигация с одним дополнительным уровнем
{% show_menu 0 100 0 1 %}
2. root 2
3. 1 level child (p, n)
4. 1 level child (p, n) of root 2
В навигации есть все, что опубликовано и одновременно присутствует в навигации. Тэг честно вываливает 1 дополнительный уровень к текущей странице (потомки).
Навигация по первому уровню (только активное дерево)
{% show_menu 1 1 0 100 %}
Естественно, там сделано не так, но для примера подойдет.
Далее пары “Активная страница” + содержимое навигации:
root 1 + 1 level child (p, n)
root 2 + 1 level child (p, n) of root 2
1 level child (p, n) + 1 level child (p, n)
2 level child (p, n) of 1 + 1 level child (p, n)
1 level child (p, n) of root 2 + 1 level child (p, n) of root 2
2 level child (p, n) of 1 of root 2 + 1 level child (p, n) of root 2
Очевидно, что в навигации данного типа меню присутствует первый уровень активного дерева. Как всегда, в неё попали только опубликованные страницы со статусом “в навигации”.
Резюме
С помощью данного тэга можно выстраивать навигацию любой сложности и вложенности, главное не запутаться в уровнях и активных деревьях.Без параметров тэг инициализируется с 0 100 и 0 100, так что в некоторых случаях можно использовать просто {% show_menu %}.
Помимо show_menu в django-cms есть ещё show_menu_below_id, show_sub_menu и show_breadcrumb, использование которых может существенно сэкономить время и нервы. Хотя, какие там нервы? Django-cms – полнеищий fun.
Читайте все тоже самое, но на английском на странице http://www.django-cms.org/en/documentation/2.0/navigation/.
2 коммент.:
Эм.. а если мне пишут, что у меня инвалидный тег (Invalid block tag: 'show_menu') ? При этом {% load cms_tags %} подключен написан строкой выше.
Что делаю не так?
Скорей всего, проблема в версии django-cms. В 2.1.0 бета приложение "меню" вынесено отдельно. См. подробности тут: http://www.django-cms.org/news/2010/03/24/django-cms-210-beta-released/.
Отправить комментарий