При создании сайтов с глубокой древовидной структурой материалов часто бывает необходимо организовать удобное в использовании и логичное по внешнему виду меню. В свою очередь для создания серьезных и гибких сайтов используют технологичные CMS, такие как NetCat, например (если понадобиться, создать сайт на NetCat жмите на ссылку).
В поставку NetCat входят 5 гибко-расширяемых макетов дизайна в состав которых входят и макеты вывода навигации.
Рассмотрим случай когда мы имеем макет с выводом меню первого уровня (в шапке) и его подменю (в левой/правой колонке) в которое, в свою очередь, необходимо внедрить меню третьего уровня.
Анализируя документацию и макеты где этот функционал меню уже реализован можно прийти к простому выводу, что прикрепление меню третьего уровня (подменю к подменю главного меню или по-другому вывод списка подразделов) реализуется конкатенацией функции s_browse_level(int $level, $template), выводящей меню, с поданными на нее параметрами: уровень раздела (начиная с нуля, в нашем прмере 2), и шаблоном $template (в нашем примере $browse_sub[2]). Внешний вид пунктов меню второго/третьего следует настраивать соответственно уже в элементах переданного шаблона.
То есть чтобы убрать ссылку с активного пункта меню в NetCat достаточно в шаблоне вывода навигации 2/3-го уровня заменить:
$browse_sub[2][active_link] = "<a href='%URL' class='active'>%NAME</a>"; |
на
$browse_sub[2][active_link] = "<b>%NAME</b>"; |
Ниже выдержка о настройке меню второго и третьего уровня из руководства разработчика NetCat:
Меню второго (и третьего) уровня
Меню второго уровня функицонально сложнее первого уровня. В данном случае необходимо вывести активный пункт меню «раскрытым», т.е. под активным пунктом меню выводится список всех его подменю (меню третьего уровня). Для реализации этой задачи использовался стандартный механизм настроек элемента навигации:
В настройки макета добавляем массив $browse_sub[1]:
$browse_sub[1][prefix] = "\"; global \$browse_sub; \$result.=\"<table width=100% cellpadding=2>"; // Настройки раздела обрабатываются функцией eval() языка PHP. При выполнении этой функции в данном случае массив $browse_sub не будет «виден» внутри цикла, а этот массив нам понадобится для вывода меню второго уровня. Поэтому в префиксе текст «прерывается» при помощи такого выражения: «"\";...\$result.=\"», а вместо троеточия вставляется объявление глобальной переменной – массива $browse_sub. Такая конструкция нужна только для данного примера – если бы был использован стандартный принцип вывода навигации (когда на любой внутренней странице видно только меню первого уровня и меню второго уровня, относящееся к этому разделу), «разрывать» текст не было бы необходимости. После разрыва идет начало таблицы, в которой будет выведено меню. $browse_sub[1][suffix] = "</table>"; // Суффикс меню второго уровня – таблица закрывается. $browse_sub[1][active] = "<tr><td ><b><a href=%URL>%NAME</a></b></td></tr>".s_browse_level(2,$browse_sub[2]); // Формат вывода активного элемента меню первого уровня. После названия со ссылкой выводится меню <strong>третьего уровня</strong> – функция s_browse_level(2,$browse_sub[2]), последний параметр которой нужно будет описать – он отвечает за форматирование вывода меню третьего уровня (см. ниже). $browse_sub[1][active_link] = "<tr><td><b>%NAME</b></td></tr>".s_browse_level(2,$browse_sub[2]); // После активного элемента меню необходимо вывести все его подразделы в том шаблоне, который был объявлен глобальным в prefix. $browse_sub[1][unactive] = "<tr><td ><a href=%URL>%NAME</a></td></tr>"; $browse_sub[1][divider] = ""; // Разделитель не используется. |
В настройках раздела определяем внешний вид меню второго/третьего уровня:
$browse_sub[2][prefix] = ""; <!-- и т.д. ... --> $browse_sub[2][divider] = ""; |
В нужное место в макете вставляем вызов функции, отвечающей за вывод меню второго уровня:».s_browse_level(1,$browse_sub[1]).»
Теперь и ежу понятно
Интересный пример, но по моему гдето видел пример попроще
Как снова увидите, киньте сюда ссылку
Дак это взято из документации к NetCat (Руководство разработчика стр.49)
Скажем такая структура
раздел 1
раздел 1.1
раздел 1.2
раздел 2
раздел 2.1
раздел 2.2
вот как сделать 2 меню из первого раздела и второго
первое меню
раздел 1.1 раздел 1.2
второе меню
раздел 2.1 раздел 2.2