Многоуровневое меню | PHPClub — клуб разработчиков PHP
nocturne
квантовая нелокальность
- #1
Хочу сделать многоуровневое меню и возник вопрос реализации.
Меню выглядит так:
PHP:
<ul> <li><a href="#">JavaScript</a> <ul> <li><a href="#">Drop Down Menu</a></li> <li><a href="#">jQuery Plugin</a></li> <li><a href="#">Ajax Navigation</a></li> </ul> </li> <li><a href="#">Effect</a> <ul> <li><a href="#">Slide Effect</a></li> <li><a href="#">Fade Effect</a></li> <li><a href="#">Opacity Mode</a></li> <li><a href="#">Drop Shadow</a></li> <li><a href="#">Semitransparent</a></li> </ul> </li> <li><a href="#">Navigation</a></li> <li><a href="#">HTML/CSS</a></li> <li><a href="#">Help</a></li> </ul>
В базе есть два значения $level 1 и 2
Значение 1 — это заголовок меню
Значение 2 — это подменю
Пишу перед циклом
PHP:
echo '<ul>';
Далее цикл mysql.
потом конструкция
PHP:
if($level == 1) { <li><a href="из базы линк">из базы титле</a> }
PHP:
if($level == 2) { <ul> <li><a href="из базы линк">из базы титле</a></li> </ul> }
конец цикла mysql
PHP:
echo '</ul>';
Это заведомо неверно, нет закрывающего тега </li> в первом выражении и во втором выражении должно быть написано только:
PHP:
<li><a href="из базы линк">из базы титле</a></li>
Как можно реализовать такое меню?
Alien85
I like my cat
- #2
nocturne написал(а):
нет закрывающего тега </li>
Нажмите для раскрытия.
..
Так поставь.
nocturne написал(а):
во втором выражении должно быть написано
Нажмите для раскрытия…
Так напиши.
nocturne
квантовая нелокальность
- #3
Alien85
Если я их поставлю, вывод меню будет неверным.
Linker
Новичок
- #4
Во-первых, значений «level» (1 и 2) не достаточно для реализации такого меню, т. к. к примеру подменю «Drop Down Menu» и «Slide Effect» будут иметь одинаковое значение 2, но к какому именно меню они относятся («JavaScript» или «Effect») не понятно.
Во-вторых, вложенность такого меню, также ограничена 1 уровнем.
У вас в структуре базы, должны быть однозначно определены зависимости между элементами меню, причём, зависимости — универсальные, т.е. уровень вложенности может быть ноль, а может быть сколько угодно.
nocturne
квантовая нелокальность
- #5
Где бы посмотреть пример как его реализовать? Структуру БД, примерный код, что бы ясно было в какую сторону двигаться.
Linker
Новичок
- #6
1. Древовидная структура хранения данных или «Деревья»
2. Рекурсивный внешний ключ на ту же самую таблицу, т.е. дополнительное поле, которое может быть NULL, а может быть внешним ключом на первичный ключ другой записи, в нашем случае «родителя».
Alien85
I like my cat
- #7
Делать для статичного меню — дерево в БД — полный БРЕД!!!
confguru
ExAdmin
KorP
Новичок
- #9
Вообще если открыть поиск — стопицот примеров
Я лично юзаю id и parent_id, а потом уже из массива строю как раз такую менюшку, быстро и просто.
Ruslan
Новичок
- #10
Все верно.
Не хватает только индекса порядка. Есть level и есть order. Каждое текущее повышение значения level вложенность в предшествующую запись и наоборот. Данный подход экономит ресурсы при выводе дерева, но значительно затрудняет его редактирование. Лучше всего индекс сортировки присваивать с шагом больше 1, чтобы при перестроении быстро заполнять пустые слоты.
scorpion-ds
Новичок
- #11
admin написал(а):
Тут все расписано
http://phpclub.ru/detail/article/db_tree
Нажмите для раскрытия…
Я бы так не делал, слишком сложное управление получается, да и при редактировании дерева, надо обновлять все индексы.
scorpion-ds
Новичок
- #12
KorP написал(а):
Вообще если открыть поиск — стопицот примеров
Я лично юзаю id и parent_id, а потом уже из массива строю как раз такую менюшку, быстро и просто.Нажмите для раскрытия…
Тоже так поступаю, вполне рабочий метод.
Универсальное многоуровневое меню
Написать отзыв
Отправить отзыв
Юрий, 24.10.2016, 09:37
Гомно-Меню, не позорьте нормальных разработчиков, удалите этот модуль. Так как он не соответствует действительности. Модуль 100% не рабочий.
ответить10
Александр, 25.12.2015, 13:45
Вот у вас на демо видно: Каталог — и в выпадающем списке каталог. А как сделать на сайте так же? НЕ так, чтобы каждую категорию отдельно писать, чтобы можно было просто в выпадающий список закинуть категории, и чтобы они все отображались, у меня очень много категорий.
ответить10
Сергей Семёнович, 13.11.2015, 05:21
Все модули перепробовал ни один не работает. Пустая трата времени. Куда не впихивай эти модули, везде php косяк. Зря только зарегистрировался тут.
ответить10
Сергей Семёнович, 13. 11.2015, 05:14
Чушь.
ответить20
Александр, 20.10.2015, 12:12
ставиться все отлично, только вот проблема после этого убрать стандарное меню из категорий. И второе — не отображется меню 3-го уровня к примеру как подменю 2-го, а отображается просто как подменю главного меню, как в стандартном меню. То есть нету визуальной градации какая должна быть.
ответить10
Игорь, 13.10.2015, 23:51
Добрый день. Пытался поставить ваше дополнение на версию 2.0.3.1. Я понимаю, что в списке версий её нет, но возможно вы пробовали, она должна поддерживаться? Сделал все по инструкции, меню не появилось. При попытке редактировать модуль — сказал, что ошибка в admincontrollermodulemenu.php on line 97.
ответить10
, 01.10.2015, 05:30
Файл в архиве opencartmenu.sql… В архиве нет этого файла!
ответить1-1
Anna, 07. 06.2015, 17:58
Та же самая ситуация. Ставила и на ocstore 1.5.5.1.2 и на Opencart 1.5.6 — не появляется вкладка Меню в Дополнениях
ответить10
Ростислав, 08.05.2015, 20:38
А у меня вообще в админке «Меню» вообще нет. Кто подскажет что делать?
ответить10
alexmay, 14.01.2015, 19:57
самая главная печаль данного модуля в том что он никак не подсвечивает активный пункт меню
ответить10
Олег, 19.11.2014, 22:00
Не понял. Создаётся второе меню. OpenCart 1.5.6.1. А просто заменить этим меню стандартное можно? Судя по демке — можно. А как? Оно встраивается не на всю ширину экрана, а над слайдами, категории остаются слева.
ответить10
Андрей, 19.10.2014, 17:59
а как вывести название меню?
ответить10
николай николаевич, 17.10. 2014, 16:37
не устанавливается пишет Invalid file type!
ответить10
Roman, 03.10.2014, 20:42
Почему-то пункт text_menus в дополнениях не хочет русифицироваться(
ответить10
Сергій, 25.09.2014, 11:45
неробить
ответить10
Система меню слоев PHP
Система меню слоев PHP 3.2.0-rc
PHP Layers Menu представляет собой иерархическую систему меню. для подготовки «на лету» DHTML-меню полагаясь на механизм сценариев PHP для обработки элементов данных.
Он выпущен под лицензией GNU Lesser General Public License (LGPL), либо Версия 2.1, либо (на ваш выбор) любая более поздняя версия.
Он поддерживает широкий спектр браузеров: Mozilla, Konqueror, Netscape, Safari,
Опера, Интернет Эксплорер; поддерживаются и достаточно старые версии браузеров;
доступность предоставляется только для текстовых браузеров.
Он обеспечивает компактную компоновку и компактный код вывода также для меню. с большим количеством записей.
Он предоставляет горизонтальные и вертикальные меню на основе слоев, поведение которых аналогично меню часто используемых приложений с графическим интерфейсом. Он также предоставляет древовидные меню на основе JavaScript, внешний вид которых аналогичен к наиболее широко используемым файловым менеджерам и инструментам работы с закладками.
Примечание. SiteBar может выступать в качестве серверной части для PHPLM; посетите веб-сайт SiteBar для получения подробной информации.
Меню на основе слоев требуют JavaScript и работают как минимум в следующих браузерах:
Mozilla 0.6+ (рекомендуется версия 0.9.2+)
Netscape 6.0+ и другие браузеры на базе Mozilla, напр. Богоявление и Галеон
Konqueror 2.2+ и браузеры на его основе, т.е. Сафари
Opera 6.
x для Linux
Опера 7.x
Internet Explorer 5, 5.5, 6.
Если шаблонов старого стиля используются вместо шаблонов по умолчанию, на основе слоев меню работают также в следующих браузерах:
Netscape 4.07+
Opera 5.x и 6.x
Internet Explorer 4
Система меню слоев PHP также предоставляет древовидных меню на основе JavaScript , чьи узлы могут быть расширены и свернуты на достаточно DOM-совместимом браузерах (они остаются полностью развернутыми для других браузеров). У них более строгие требования по сравнению с меню слоев и предоставить полная функциональность только для браузеров, достаточно совместимых с DOM для поставленной цели, то есть:
Mozilla (рекомендуется версия 0.9.2+)
Netscape 6.0+ и другие браузеры на базе Mozilla, напр. Богоявление и Галеон
Konqueror 3.0+ и браузеры на его основе, т.
е. Сафари
Опера 7.x
Internet Explorer 4, 5, 5.5, 6
Следующие браузеры не поддерживаются, так как их поддержка либо вообще невозможна, либо слишком сложна:
Netscape 4.x
Konqueror 2.x
Рысь и ссылки
Opera 5.x и 6.x
Однако полная доступность предоставляется для вышеперечисленных браузеров: древовидные меню всегда отображаются полностью в разобранном виде (и ни один узел не может быть свернут) на них, и это гарантирует неплохую доступность для них.
Два класса предназначены для подготовки также решений доступности , то есть древовидные меню «на стороне сервера» (которые имеют точно такой же вид, как и вышеупомянутые Древовидные меню на основе JavaScript, но требуется поддержка PHP на веб-сервере) и простые меню, которые не требуют поддержки JavaScript в браузере.
Может использоваться произвольное количество вертикальных и горизонтальных меню. на той же странице.
Можно использовать столько уровней, сколько необходимо, и каждое меню создается динамически. использование данных, извлеченных из файла, строки или таблицы базы данных; формат данных достаточно прост и интуитивно понятен.
Поддерживается несколько языков (i18n), если данные извлекаются из базы данных.
PHPLM соответствует текущим рекомендациям для разработчиков PHP: работает корректно со следующими настройками
register_globals = Выкл.
безопасный_режим = включен
error_reporting = E_ALL
allow_call_time_pass_reference = Выкл.
short_open_tag = Выкл.
Для использования поддержки БД требуется PEAR DB; очевидно, если действует ограничение open_basedir, PEAR должен быть установлен где-то внутри разрешенного пути.
PHPLM совместим со следующими веб-стандартами:
Некоторые интересные настройки собраны в каталоге PATCHES.
-- Марко Пратеси - http://www.marcopratesi.it/
Добавление динамического слоя — Знакомство с языком программирования PHP — Биоинформатика Веб-разработка
Статические и динамические веб-страницы
Насколько мощными являются HTML и CSS, они позволяют нам создавать великолепные веб-страницы и веб-сайты и действительно являются основой для любая веб-страница или веб-сайт, которые мы создаем, имеют четкое ограничение в том, что все, что мы можем с ними делать, — это создавать «статические» страницы. Мы можем построить/написать код для нескольких статических страниц, связать страницы друг с другом, и вот у нас есть веб-сайт. Статический веб-сайт.
На следующем рисунке показано основное различие между статическим и динамическим веб-сайтом.
Статическая веб-страница – это текстовый файл с содержимым, размеченным с помощью HTML и в конечном итоге оформленным с помощью CSS, который находится где-то в файловой системе веб-сервера и ожидает отправки в браузер, когда пользователь посещает URL-адрес, к этому. Таким образом, этот текстовый файл, также известный как «источник» веб-страницы, предварительно существует на веб-сервере и отправляется в браузер пользователя по требованию.
Напротив, динамическая веб-страница содержит по крайней мере некоторые элементы, которые уже не присутствуют в исходном файле, а добавляются к ней «на лету» веб-сервером, когда пользователь посещает ее URL-адрес.
Рисунок 4-1: Статические и динамические веб-страницыЭту концепцию, возможно, не сразу легко понять, но, надеюсь, она станет ясной после рассмотрения примера на следующей странице.
Независимо от того, является ли страница статической или динамической, в конце дня результат для конечного пользователя один и тот же, взаимодействие с пользователем не меняется, а посещение URL-адреса в браузере в конечном итоге приведет к тому, что веб-сервер отправляет (статический) текстовый файл с исходным кодом HTML в браузер, который затем заботится о графическом отображении этого как веб-страницы, которую пользователь может видеть в окне браузера. Разница заключается в том, как этот текстовый файл с исходным кодом HTML генерируется веб-сервером. В статических страницах текстовый файл уже есть, в динамических страницах его нужно как-то создать/собрать, прежде чем он будет отправлен.
Языки программирования
Чтобы веб-сервер мог создать или собрать динамическую страницу, нам нужен какой-то язык программирования. Есть несколько языков программирования, которые подходят для выполнения такой задачи. Чтобы назвать лишь некоторые из самых популярных, Perl, Python и Ruby подходят для этой работы. Эти языки обычно выполняются как «консольные приложения», то есть мы можем запускать приложения, написанные на этих языках, в компьютерной оболочке. Однако для того, чтобы их можно было использовать в веб-инфраструктуре, нам нужно прибегнуть к CGI (Common Gateway Interface), общему протоколу, который позволяет нам запускать консольные приложения в среде, контролируемой веб-сервером, короче говоря, как веб-приложения.
В зависимости от задачи, которую мы хотим выполнить, или приложения, которое мы создаем, действительно, один из этих языков может быть лучшим выбором. Например, в последние годы Python стал одним из предпочтительных языков для разработки биоинформатических приложений. Он чрезвычайно мощный, полный, позволяет очень быстро обрабатывать данные и имеет ряд доступных библиотек, посвященных биоинформатике.
PHP
Однако для целей этого курса, в основном ориентированного на начинающих в области разработки и программирования, мы выберем другой язык, преимущество которого заключается в том, что он изначально предназначен для создания веб-приложений и управления динамическими веб-страницами. , что позволяет полностью обойти слой CGI и связанную с ним кривую обучения. Этот язык, называемый PHP (рекурсивная аббревиатура от PHP: препроцессор гипертекста), постоянно развивался в последние годы и на момент написания этой статьи доступен в версии 7 (PHP 7). См. здесь для истории развития языка.
Хотя в самом начале своего существования PHP имел репутацию несколько медленного рендеринга веб-страниц, сейчас это не так, и несколько чрезвычайно популярных веб-фреймворков/систем управления контентом (CMS) основаны на PHP. Примечательно, что WordPress, который используется более чем на 25% всех веб-сайтов в Интернете (источник), написан на PHP.
Вот несколько преимуществ PHP, не обязательно в порядке важности:
- изначально разработан для создания веб-приложений, создан для Интернета, без CGI
- полнофункциональный
- поддерживает объектно-ориентированное программирование
- может использоваться как язык программирования «общего назначения» (не ограничиваясь веб-приложениями)
- плавная кривая обучения, более легкая в изучении по сравнению с другими языками
- используется в нескольких популярных средах веб-разработки, таких как WordPress .
- обычно доступен на каждом веб-сервере
По всем этим причинам этот язык программирования является предпочтительным для данного курса по веб-разработке для биоинформатики.
Давайте начнем с довольно простого примера того, как использовать PHP для обслуживания веб-страницы, которая ранее не существовала на сервере, в качестве статической текстовой страницы.