php динамическое меню сайта
Создаем динамически формируемое меню
Здравствуйте, уважаемый посетитель!
Ранее, при создании динамического сайта с помощью PHP мы получили отдельные блоки, которые в дальнейшем стали использоваться при формировании HTML-страниц. В результате чего, мы получили динамический сайт, что позволило существенно сократить HTML-код и значительно упростить его обновления.
На этапе создания динамического сайта вопрос динамически формируемых меню мной был сознательно отложен, так как для его оптимального решения требовалось использование такого инструмента, как база данных. И поэтому, после того, как мы в предыдущих статьях подробно рассмотрели основные моменты работы с БД MySQL, то теперь несложно будет это сделать.
Следует отметить, что после выполнения этих преобразований, кроме сокращения HTML-кода мы получим еще очень серьезное преимущество. Оно будет заключаться в том, что в дальнейшем, при внесении в элементы навигации каких-либо изменений не будет требоваться корректировка всех страниц сайта. В этом случае будет достаточно лишь вносить небольшие изменения в соответствующую таблицу базу данных. Что намного проще и удобней.
Создаем функцию вывода всех строк заданной таблицы
Для того, чтобы составить функцию вывода всех записей из таблицы MySQL, воспользуемся ранее рассмотренным примером вывода набора строк, который приводился в статье Выводим данные из БД MySQL в PHP.
По существу, отличие между этими вариантами будет заключаться лишь только в запросе SQL. Теперь, вместо заданных условий выборки строк («SELECT * FROM `url` WHERE `url`=’poluchity-skidku’ OR `url`=’statistika-ugonov’ OR `url`=’kontakti’ ORDER BY `id` DESC»), в новом запросе каких-либо условий указываться не будет, в связи с чем он примет более упрощенный вид: «SELECT * FROM `url`».
//—-Функция вывода всех строк таблицы MySQL————-
function getAll ($table) <
Рис.1 Функция вывода всех строк таблицы MySQL
Здесь можно лишь добавить, что для того, чтобы данная функция была универсальна и могла бы использоваться для различных таблиц, вместо конкретного имени таблицы «url» в качестве параметра функции включена переменная «$table». Эта же переменная используется и в запросе SQL для обозначения нужной таблицы.
Таким образом, для получения всех записей таблицы необходимо при вызове этой функции указать лишь ее наименование. Что исключает необходимость каждый раз при работе с другими таблицами составлять новые однотипные программные коды.
Формируем и подключаем файл ‘start.php’
Функцию, выполняющую выборку всех строк нужной таблицы мы получили и теперь следует сформировать и подключить ко всем страницам файл, который будет при каждом запросе обеспечивать работу сайта с базой данных MySQL.
И теперь, создадим отдельный файл под именем «start.ρhρ», и подключим в нем с помощью языковой инструкции «require_once» вышеупомянутые «connect.ρhρ» и «functions.ρhρ»», как изображено на рис.2.
Рис.2 Формирование файла «start.ρhρ»
А, затем подключив «start.ρhρ» в начале каждой HTML-страницы, мы обеспечим выполнение всех возможных операций с базой данных MySQL, необходимых при отработке запросов пользователей. А сделать совсем несложно, использовав ту же самую инструкцию, как показано ниже.
Рис.3 Подключение файла «start.ρhρ к страницам сайта»
Для нашего сайта следует добавить этот фрагмент кода во все имеющиеся на данный момент страницы, соответствующие следующим файлам: «index.ρhp», «article.ρhp», «action.ρhp», «righting.ρhp» и «contacts.ρhp».
Следует отметить, что такое решения с использованием отдельного файла «start.phρ» выгодно отличается от варианта, в котором к страницам подключались бы отдельные «connect.phρ» и «functions.phρ». А, связано это с тем, при необходимости в дальнейшем подключения других элементов не потребует править код во всех страницах, а достаточно будет это сделать только в файле «start.phρ».
После того, как мы создали соответствующую функцию и решили вопрос с подключением ее на всех страницах сайта, можно перейти к непосредственному формированию блоков меню и выносу их из HTML-страниц.
Формируем файлы главного меню и меню футера
Для того, чтобы создать блоки, в которых будут формироваться элементы навигации обратимся с начала к соответствующим фрагментам HTML-кода страниц сайта. Ниже показан фрагмент меню главной страницы в файле «index.ρhp».
Рис.4 Фрагмент HTML-кода главного меню в файле «index.ρhp»
Аналогично и для других страниц. Отличие будет состоять лишь только в том, что класс «activ» будет присваиваться другим тегам , соответствующим текущей страницы.
Если внимательно посмотреть на приведенный HTML-код меню, то можно заметить, что он включает в себя всю необходимую информацию, которая имеется в созданной ранее таблице MySQL под именем «url», а именно.
Таким образом, используя базу данных MySQL можно составить PHP-код, который будет извлекать из таблицы «url» все записи и заносить в теги соответствующие данные.
А для того, чтобы иметь возможность поочередно выполнять необходимые преобразования с тегами воспользуемся оператором цикла «for».
Ниже показан вариант PHP-кода, размещенного во вновь созданном файле «menu.php» папки «blocks», который используя содержимое таблицы «url» БД MySQL обеспечит формирование главного меню для любой страницы сайта.
//—-Формирование главного меню————-
$current_url = substr ($_SERVER[ ‘REQUEST_URI’ ], 1 );
$data_bd = getAll (‘url’);
Рис.5 Формирование главного меню в файле «menu.php»
Следует отметить, что здесь для получения текущего URL, переменной $current_url присваивается значение, полученное из элемента «$_SERVER[‘REQUEST_URI’]» суперглобального массива «$_SERVER» (поз.3). В данном случае, это будет адрес текущей страницы, например «/index.ρhp».
А, для того, чтобы получить URL без слэша «/», с помощью строковой функции substr возвращается подстрока без первого символа. В итоге, переменная $current_url будет принимать вид типа «index.ρhp», соответствующий значениям поля «file» таблицы «url».
Таким образом, мы создали файл «menu.ρhp», который будет формировать меню во всех страницах сайта. Осталось его только подключить.
А, сделать это совсем несложно, используя ту же языковую инструкцию, что использовалась и в предыдущих случаях, «require_once». Ниже, на примере файла «index.php» показан фрагмент кода, где вместо множества тегов , изображенных на рис.4, добавлена всего лишь одна инструкция PHP.
Рис.6 Подключение файла «menu.ρhp» на примере файла «index.php»
В итоге, мы выполнили все необходимые преобразования, касающиеся главного меню. То же самое следует сделать и для меню футера.
//—-Формирование меню футера————-
$data_bd = getAll (‘url’);
Многоуровневое меню на PHP и MySQL
В этой статье я покажу, как можно создавать многоуровневое меню на PHP и MySQL. Безусловно, вариантов его создания можно придумать много, но, судя по количеству Ваших вопросов на эту тему, Вам нужен пример. И его я приведу в этой статье. Сразу отмечу, что данная статья имеет смысл только для тех, кто знает PHP и умеет работать с MySQL. Всем остальным сначала надо пройти этот курс, либо прочитать какие-нибудь книги по PHP и MySQL.
Для начала создадим таблицу в базе данных со следующими полями:
С таблицей разобрались, теперь пришло время PHP-кода. Полный PHP-код приведён ниже:
Этот код полностью рабочий, однако, Вы должны понимать, что так никто не пишет (в частности, вывод через echo HTML-тегов). И Ваша задача взять алгоритм из этого кода, но не сам код. А дальше этот алгоритм подключить к своему движку. Я постарался тщательно прокомментировать код вывода многоуровневого меню на PHP и MySQL, но, безусловно, он не самый прозрачный и требует уже неплохих начальных знаний. Если Вы ещё плохо знаете PHP и MySQL, то сначала настоятельно рекомендую пройти этот курс. После прохождения данного курса Вы сможете самостоятельно писать подобные скрипты и даже намного сложнее.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 3 ):
Спасибо за статью. Сейчас делаю новый сайт и там буду использовать этот вид меню.
Присоединяюсь к благодарностям. Миша, а как бы лучше управлять очередностью пунктов меню? Например, в Друпале у каждого элемента меню есть «вес», чем он меньше – тем ссылка выше (раньше). А в панели управления они просто перетягиваются. Ну и «Сохранить» – запись в базу данных – вот здесь я что-то не соображу никак. Если решишься сделать такой урок, будет просто здорово!
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.
Как сделать меню для сайта на PHP
Этот код особенно будет полезен для динамичных сайтов, которые имеют самописные движки. Я предложу два варианта кода, которые имеют незначительные отличия (в чем различие будет пояснено после).
Для начала приведу примерную структуру сайта, для которого подойдет это меню. Структура сайта должна иметь следующий вид (классический вид):
Сайт может содержать у разделов еще и подразделы:
Такая структура также будет работать для нашего меню лишь с небольшими отличиями.
Я предлагаю создать отдельный файл для меню на php. Например, menu.php было бы отличным названием для такого файлика. Для реализации меню также представлен стиль меню в CSS, чтобы сразу сделать его более менее красивым. Естественно этот стиль дается только для ознакомления, поскольку дизайны у сайтов очень разные.
Код для стиля меню в CSS:
Теперь, давайте рассмотрим первый вариант реализации меню на PHP, который является немного упрощенным.
Первый вариант кода меню на PHP
Порядок следования в массиве будет сохранятся и при выводе меню на сайте. То есть массив надо заполнять в порядке, в котором нужно выводить меню.
Примечание:
В случае, если URL (адреса) заголовком разделов имеют вид:
/razdel_1
или такой
/razdel_1/nazvanie_razdela.html
то в array_menu нужно записывать точное совпадение:
$array_menu[$i][‘url’]=’/razdel_1′
или для второго случая:
$array_menu[$i][‘url’]=’/razdel_1/nazvanie_razdela.html’ ;
Второй вариант кода является модифицированным вариантом первого и предусматривает возможность подсвечивания меню даже в статьях, которые находятся в разделах.
Второй вариант кода меню на PHP
Этот код легко можно модифицировать и дальше. Например, если у разделов есть подразделы, которые желательно как-то выделять.
Динамические страницы в PHP
В этом уроке мы сделаем такую страницу с помощью GET-параметров.
Создание динамической страницы
Чтобы показывать пользователю разные страницы, сначала нужно подготовить контент для каждой из них. Пусть все страницы лежат в двумерном массиве:
Контент готов, теперь определимся с навигацией по страницам.
Для этого мы добавим в URL GET-параметр под названием id, который будет содержать в себе номер статьи. Например /index.php?id=5 будет означать, что нужно отобразить пятую статью.
В качестве номеров мы можем использовать ключи массива со статьями. У нас ведь сейчас есть 2 статьи, одна с индексом 0, другая с индексом 1, верно?
Вот эти числа у нас и будут идентификаторами. Теперь напишем простенькое меню с новыми URL-адресами:
В коде выше мы выводим ссылку на главную статью и по персональной ссылке для каждой статьи.
Получить статью по id очень просто:
Т.е. мы по идентификатору статьи получаем массив с этой самой статьёй.
Динамическая страница готова! Ещё раз весь код:
Теперь вы можете создавать динамические сайты, на которых количество страниц зависит только от количества элементов массива, и никаких десятков html-файлов. 🙂
Конечно, эта система не идеальна. Гораздо интересней смотрелись бы URL вида /articles/5 или /dinamicheskie-stranicy-v-php (как у статьи, которую вы сейчас читаете).
В ближайшее время я добавлю новую статью про полноценное ЧПУ (человеко-подобные URL) и подробно объясню, как это делается.
Меню сайта на PHP
Меню сайта на php, который управляется php скриптами имеет свои особенности. Это не просто абсолютные либо относительные ссылки, хотя это вполне может быть и так, а, как правило, динамически формируемые блоки ссылок боковых панелей с разделами и подразделами и блоки ссылок с самих внутренних страниц сайта. Динамически формируемое меню очень удобно, потому, как его можно вставлять в любое место сайта и, что самое важное в нужное время. Тоесть при переходе в разные разделы и подразделы можно динамически разворачивать и разные блоки меню. Причем они могут быть разные не только по содержанию, но и по форме и оформлению. В статическом сайте тоже вполне можно проделывать такие финты, но это будет стоить дополнительных файлов шаблона и еще массу всяких ухищрений. В то время, как сайт написанный на php ничего этого не требует. Шаблон останется, как и был. Всем будет управлять один или несколько простых php скриптов.
Для того, чтобы убедиться в этом, достаточно написать php скрипт для динамического формирования меню, например, первой рубрики и заставить его развернуть меню этой рубрики через уже написанный ранее скрипт шаблонизатора. Остальные рубрики можно будет сформировать подобным образом. Причем код самого скрипта при этом мало чем практически не изменится. Меняться будет только текстовый файл, который будет определять названия ссылок и сами ссылки. Код такого скрипта приведен ниже по тексту.
Для того, чтобы такой скрипт работал необходим текстовый файл в котором будут храниться названия ссылок меню, сами ссылки и их title. Создать такой файл несложно, достаточно выполнить из главного меню программы Dreamweaver команду File −> New, создать новый html документ, как было описано ранее, проверить и если необходимо изменить кодировку нового файла на UTF-8, а затем сохранить его под именем rubric1.dat в предварительно созданной для него папке data. Полный путь к этому файлу будет D:/Mysitephp/data/rubric1.dat. Содержимое файла, приведенное ниже, это сами ссылки, их названия и их title (подсказки). Кроме, для того, чтобы запустить данный скрипт в работу, его необходимо подключить с помощью функции include() в шаблонизаторе main.php.
Кроме этого необходимо также создать небольшой скрипт с установками, в котором будут храниться полный адрес сайта, пути к папкам страниц и мета описаний сайта, пути к файлам меню сайта и подключить его с помощью функции include() в шаблонизаторе main.php. Для этого необходимо создать новый php файл, и сохранить его под именем например setings.php в папке php. Полный путь к файлу будет D:/Mysitephp/php/setings.php, а его содержимое приведено ниже.
Такое меню пока работать не будет, поскольку в нем есть только сами ссылки со всеми необходимыми атрибутами, но нет, скрипта, который-бы обеспечил переход по этим ссылкам и открытие страниц сайта, которые будут соответствать этим ссылкам. Этим php скриптом мы займемся далее.