Меню сайта на php, который управляется php скриптами имеет свои особенности. Это не просто абсолютные либо относительные ссылки, хотя это вполне может быть и так, а, как правило, динамически формируемые блоки ссылок боковых панелей с разделами и подразделами и блоки ссылок с самих внутренних страниц сайта. Динамически формируемое меню очень удобно, потому, как его можно вставлять в любое место сайта и, что самое важное в нужное время. Тоесть при переходе в разные разделы и подразделы можно динамически разворачивать и разные блоки меню. Причем они могут быть разные не только по содержанию, но и по форме и оформлению. В статическом сайте тоже вполне можно проделывать такие финты, но это будет стоить дополнительных файлов шаблона и еще массу всяких ухищрений. В то время, как сайт написанный на php ничего этого не требует. Шаблон останется, как и был. Всем будет управлять один или несколько простых php скриптов.
Для того, чтобы убедиться в этом, достаточно написать php скрипт для динамического формирования меню, например, первой рубрики и заставить его развернуть меню этой рубрики через уже написанный ранее скрипт . Остальные рубрики можно будет сформировать подобным образом. Причем код самого скрипта при этом мало чем практически не изменится. Меняться будет только текстовый файл, который будет определять названия ссылок и сами ссылки. Код такого скрипта приведен ниже по тексту.
// Формирователь меню
$menu = @file($rubric1_menu);
$lines = count($menu);
for ($i = 0; $i < $lines; $i++)
{
list($menu_link,$menu_name,$menu_title)=explode("::", $menu[$i]);
if($page == rub1_part1 and $i == 0) {$refcolor = "style="color:#cc0000"";}
elseif($page == rub1_part2 and $i == 1) {$refcolor = "style="color:#cc0000"";}
elseif($page == rub1_part3 and $i == 2) {$refcolor = "style="color:#cc0000"";}
else {$refcolor = "";}
$rubric1.="
Для того, чтобы такой скрипт работал необходим текстовый файл в котором будут храниться названия ссылок меню, сами ссылки и их title. Создать такой файл несложно, достаточно выполнить из главного меню программы Dreamweaver команду File −> New, создать новый html документ, как было описано ранее, проверить и если необходимо изменить кодировку нового файла на UTF-8, а затем сохранить его под именем rubric1.dat в предварительно созданной для него папке data. Полный путь к этому файлу будет D:/Mysitephp/data/rubric1.dat. Содержимое файла, приведенное ниже, это сами ссылки, их названия и их title (подсказки). Кроме, для того, чтобы запустить данный скрипт в работу, его необходимо подключить с помощью функции include() в шаблонизаторе main.php.
Rub1_part1::Раздел 1::Раздел 1 рубрики 1::
rub1_part2::Раздел 2::Раздел 2 рубрики 1::
rub1_part3::Раздел 3::Раздел 3 рубрики 1::
Кроме этого необходимо также создать небольшой скрипт с установками, в котором будут храниться полный адрес сайта, пути к папкам страниц и мета описаний сайта, пути к файлам меню сайта и подключить его с помощью функции include() в шаблонизаторе main.php. Для этого необходимо создать новый php файл, и сохранить его под именем например setings.php в папке php. Полный путь к файлу будет D:/Mysitephp/php/setings.php, а его содержимое приведено ниже.
# папка с html документами
$doctemplates = "templates";
# полный путь до директории скрипта
$turl="http://mysitephp.ru";
# база с данными
$rubric1_menu = "data/rubric1.dat";
?>
Как работает php скрипт формирования меню? Сначала в переменную $menu с помощью функции file() помещается содержимое текстового файла rubric1.dat. Затем функция count() подсчитывает количество строк в текстовом файле и функциями list() и explode() в цикле разворачивается само меню, где методом склеивания строк (операция точка . ) формируются стороки ссылок с их названиями и титлами, которое затем помещается в переменную $rubric1. Далее скрипт шаблонизатора, куда скрипт меню подключен функцией include() , перемещает содержимое переменной $rubric1 в нужное место сайта с помощью уже описанной ранее функции repl () .
Такое меню пока работать не будет, поскольку в нем есть только сами ссылки со всеми необходимыми атрибутами, но нет, скрипта, который-бы обеспечил переход по этим ссылкам и открытие страниц сайта, которые будут соответствать этим ссылкам. Этим php скриптом мы займемся далее.
Далее можно проект обновленный скриптом формирования меню. Скачать обновленный проект можно также на странице, которая откроется после оформления и активизации бесплатной подписки на панели справа. Адрес страницы необходимо сохранить. Именно на этой странице в дальнейшем будут появляться ссылки на скачивание обновлений проекта, различных полезных скриптов, программ, уроков и видеоуроков по схемотехнике, программированию и сайтостроению для новичков .
Скачанный обновленный новыми скриптами проект php сайта теперь можно сравнить с тем, что получилось в результате выше описанных действий. Далее, дабы исключить разночтения полезно будет полностью заменить проект на скачанный, выполнить операцию , запустить сервер Denwer, набрать в окне браузера mysitephp.ru и просмотреть, что из этого получилось. В левой верхней части шаблона должно развернуться меню первого раздела, как показано на картинке ниже.
Перейти и растаять в своей любимой социалке
Ни один сайт не обходится без навигации или как еще называют "меню сайта". Так вот меню сайта бывает одноуровневым и многоуровневым в виде дерева. Если с одноуровневым меню особых сложностей в плане реализации не возникает, то при создании многоуровневого меню нужно хорошо подумать.
Самое главное в этой задаче это спроектировать базу данных для нашего многоуровневого меню. Создадим таблицу Categories с тремя полями id , title , parent где:
За ветвление меню отвечает поле Parent если Parent = 0 , то эта категория является родительской. Для того чтобы добавить потомков к родительской категории нужно в поле parent указать ID нужного родителя. Например:
Как видно из таблицы, у родительской категории Автомобили есть два потомка - это Мазда и Хонда связанных по полю Parent . А у категории Мотоциклы два потомка - это Кавасаки и Харлей . При этом у категории Лодки нет потомков. Надеюсь, что Вы поняли,как связать категории.
Если Вы хотите использовать данное меню в админке своего сайта, то нужно переписать пару функций tplMenu() , showCat() .
".$category["title"].""; }else{ $menu = ""; } if(isset($category["childs"])){ $i = 1; for($j = 0; $j < $i; $j++){ $str .= "→"; } $i++; $menu .= showCat($category["childs"], $str); } return $menu; } /** * Рекурсивно считываем наш шаблон **/ function showCat($data, $str){ $string = ""; $str = $str; foreach($data as $item){ $string .= tplMenu($item, $str); } return $string; } //Получаем HTML разметку $cat_menu = showCat($tree, ""); //Выводим на экран echo ""; ?>
Поскольку она раскрывает содержание модуля menu.php . Ниже будет представлена собственная разработка меню на PHP, которая была написана с нуля в блокноте.
Этот код особенно будет полезен для динамичных сайтов, которые имеют самописные движки . Я предложу два варианта кода, которые имеют незначительные отличия (в чем различие будет пояснено после).
Для начала приведу примерную структуру сайта, для которого подойдет это меню. Структура сайта должна иметь следующий вид (классический вид):
/index.html /razdel_1/ /razdel_1/articles_1.html /razdel_1/articles_2.html ... /razdel_2/ /razdel_2/articles_1.html /razdel_2/articles_2.html ... ... ... /razdel_N/articles_2.html
Сайт может содержать у разделов еще и подразделы:
/razdel_1/podzaderl_1/ /razdel_1/podzaderl_1/articles_1.html /razdel_1/podzaderl_1/articles_2.html ... /razdel_1/podzaderl_2/articles_1.html /razdel_1/podzaderl_2/articles_2.html
Такая структура также будет работать для нашего меню лишь с небольшими отличиями.
Я предлагаю создать отдельный файл для меню на php. Например, menu.php было бы отличным названием для такого файлика. Для реализации меню также представлен стиль меню в CSS, чтобы сразу сделать его более менее красивым. Естественно этот стиль дается только для ознакомления, поскольку дизайны у сайтов очень разные.
.menu { height:42px; padding:0 0 0 16px; background:url(images/spacer.png) repeat; } .menu li { display:block; float:left; } .menu li.active { background: #000011; } .menu a { color:#FFF; display:block; line-height:42px; text-decoration:none; padding:0 14px; } .menu a:hover { background:url(images/spacer.png) repeat; }
Теперь, давайте рассмотрим первый вариант реализации меню на PHP, который является немного упрощенным.
\n"; for ($i=0;$i": " "; echo "".$array_menu[$i]["name"]." \n"; } echo ""; ?>
Меню можно разделить на две части. Первая содержит информационный массив $array_menu , в который заносятся названия наших разделов с ссылками на разделы. Есть вариант забить эти данные в базу данных mySQL, но особо смысла в этом нет, поскольку выборка совсем небольшая, поэтому на скорость работы это никак не повлияет.
Вторая часть содержит вывод меню через цикл for . В цикле происходит сравнение адреса сайта с адресом из массива $array_menu . Если есть совпадение, то выводим очередной раздел меню со специальным классом active:
Порядок следования в массиве будет сохранятся и при выводе меню на сайте. То есть массив надо заполнять в порядке, в котором нужно выводить меню.
Примечание:
В случае, если 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"
;
Как работает первый вариант меню?
Он подсвечивает меню только, если Вы находитесь по адресу заголовка раздела. Например, если адрес страницы будет /razdel_1/articles_1.html
, то меню никак не будет подсвечиваться.
Второй вариант кода является модифицированным вариантом первого и предусматривает возможность подсвечивания меню даже в статьях, которые находятся в разделах.
"; for ($i=0;$i": " "; echo "".$array_menu[$i]["title"]." "; } else { echo ($URL) == ($array_menu[$i]["url"]) ? "": " "; echo "".$array_menu[$i]["title"]." "; } } echo ""; ?>
Если вас интересует ответ на вопрос как создать меню сайта, то вы пришли по верному адресу.
Мы рассмотрим создание динамического меню на php, написанное специально для чайников в программировании, а также для тех, кто еще в танке.
Создадим будущий макет нашего сайта. Для этого нарисуем в фотошопе супер красивый сайт и разрежем на кусочки. Представим, что шапка, логотип, меню и подвал не написаны словами, как в данном примере, а это изысканно и красочно оформленные элементы сайта.
Создадим для примера три страницы и назовем их Раздел 1, Раздел 2, Раздел 3
Этот текст для разных страниц будет разный, но мы не будем на нем заморачиваться и оставим его как есть на всех страницах.
Приступим к созданию сайта на php.
header.html
logo.html
menu.html
footer.html
Добавим файл с этим текстом, чтобы видеть его на всех страницах. Назовем его text.html
Примечание. С этого момента дальнейшие записи буду вести непосредственно в файле text.html
Для этого поступим просто - сохраним настоящий файл, но уже с расширением php и сотрем все текстовое наполнение. Пусть это не профессионально, зато понятно, а усложнять все будем позже. Сейчас главное понять принцип верстки.
Благодаря ему мы имеем представление о том, как будет выглядеть наш сайт.
В него мы сейчас вставим с помощью команды include все элементы сайта.
Раздел 1 , назовем 1.php
Раздел 2 , назовем 2.php
Раздел 3 , назовем 3.php
Для этого можно воспользоваться простейшей командой сохранить как...
Для самых маленьких поясню: открываем файл template.php , затем нажимаем сохранить как... и сохраняем под названием 1.php , повторяем процедуру и последовательно сохраним страницы сайта 2.php , 3.php
У нас получилось 3 страницы с одинаковым дизайном. Достаточно вставлять вместо файла text.html другой, дополнять разными картинками или какими-либо html кодами, скриптами и содержимое каждой страницы будет уникальным.
Внимание!
Если не будет создан файл index.php для главной страницы, то в браузере, набрав адрес сайта мы не увидим сам сайт, а всего лишь структуру директории (перечень папок).
Можете посмотреть в денвере и убедиться. Исправим ситуацию - создадим файл index.php и назовем долго не мудрствуя Главная . Заодно создадим файл text-home.html и с помощью команды include вставим на только что созданную главную страницу сайта.
Что получилось - так просто не увидим. Это уже не шаблон с расширением html.
Но и не проблема. Нам нужен собственный, т.е. локальный сервер на компьютере. Для этого установим денвер и результат своей работы будем смотреть в браузере, не выходя в интернет.
Вот теперь порядок. Набрала адрес сайта и увидела все только что созданное в нормальном виде с дизайном.
Наша задача - научиться чувствовать сайт, созданный на php. Поэтому ссылки будем делать, как на обычном статичном сайте Раздел 1 и т.д.
Мне эта процедура создания ссылок безумно нравится в Macromedia Dreamweaver. Успевай жать ОК и пить кофе.
Посетителю будет удобнее ориентироваться по сайту зная, на какой именно страинице он находится.
Если вы выполнили все шаги строго по пунктам, то видите, что у нас все ссылки в меню активны постоянно. Как это исправить?
Для начала вспомним определение что такое Условные операторы
– это когда какое-то действие выполняется или не выполняется в зависимости от условий.
Выполним следующие действия:
if ($master == "Главная") // это условие. Если оно выполняется – то в данном месте меню с помощью команды echo вставляются обычные HTML-теги выводящие надпись «Главная».
echo "
Главная
";else //означает «иначе» - что произойдёт, если условие не выполняется. В данном случае при невыполнении условия надпись «Главная» будет ссылкой, ведущей на главную страницу.
echo "
Главная
";Для этого на всех страницах разместим такие блоки кода:
$master ="Главная";
$master ="Раздел 1";
$master ="Раздел 2";
$master ="Раздел 3";
Как видно для каждой страницы свой код.
1) Открываем файл index.php
и вставляем код
$master ="Главная";
до места вставки кода, выводящего само меню сайта
include "menu.html";
?>
2) Открываем файл menu.html и вставляем код с условием вместо простой html ссылки на главную страницу.
Смотрим в браузере и любуемся! Если зайдем на главную страницу, то ссылка перестала быть активной!
3) Повторяем пункт 1 и 2 со страницами 1.php, 2.php, 3.php
1) Открываем файл 1.php и вставляем до кода, выводящего меню блок с заданной переменной
$master ="Раздел 1";
2) Открываем файл menu.html и вставляем код с условием вместо простой ссылки Раздел 1 , внеся следующие изменения:
if ($master == "Раздел 1") // это условие. Если оно выполняется – то в данном месте меню с помощью команды echo вставляются обычные HTML-теги выводящие надпись «Раздел 1».
echo "
Раздел 1
";else //означает «иначе» - что произойдёт, если условие не выполняется. В данном случае при невыполнении условия надпись «Раздел 1» будет ссылкой, ведущей на главную страницу.
echo "
Раздел 1
";Чудо повторилось! Теперь, если мы находимся на странице Раздел 1 , ссылка в меню не активна.
Повторенье - мать ученья! Или для тех, кто в танке! Еще раз
1) Открываем файл 2.php и вставляем код.
$master ="Раздел 2";
2) Снова откроем файл menu.html и вставляем код с условием
if ($master == "Раздел 2") // это условие. Если оно выполняется – то в данном месте меню с помощью команды echo вставляются обычные HTML-теги выводящие надпись «Раздел 2».
echo "
Раздел 2
";else //означает «иначе» - что произойдёт, если условие не выполняется. В данном случае при невыполнении условия надпись «Раздел 2» будет ссылкой, ведущей на главную страницу.
echo "
Раздел 2
";1) Открываем файл 3.php и задаем переменную.
$master ="Раздел 3";
2) В файл menu.html вставляем код с условием вместо ссылки Раздел 3 , изменения такие:
if ($master == "Раздел 3") // это условие. Если оно выполняется – то в данном месте меню с помощью команды echo вставляются обычные HTML-теги выводящие надпись «Раздел 3».
echo "
Раздел 3
";else //означает «иначе» - что произойдёт, если условие не выполняется. В данном случае при невыполнении условия надпись «Раздел 3» будет ссылкой, ведущей на главную страницу.
echo "
Раздел 3
";Итог : мы вместо ссылок в меню такого вида
Главная
Раздел 1
Раздел 2
Раздел 3
Этот урок о php был написан по многочисленным просьбам посетителей сайта и является практическим пособием по изучению создания динамического меню для сайта на php.
Следующая шпрагалка вебмастера расскажет о том, как сделать на php уникальные заголовки, описания и ключевики для каждой страницы.
Вы можете скачать архив со всеми файлами шаблона сайта и меню php. Новичкам в программировании рекомендуется.
Если же вы готовы к серьезному изучению php, то лучше видео курса от Попова найти сложно. У него огромный опыт и хороший слог.
]]> ]]>