Использование PHP для сайта-визитки, разделение на модули

Описанный далее метод безусловно рабочий и может применяться всеми, от новичка до профессионала, тем более, что метод правильный, но данная статья написана специально для тех, кто постигает азы создания сайтов. Тем самым я говорю, что людям с опытом, данная статья может показаться бессмысленной, но все когда-то и с чего-то начинают.

Зачем вообще использовать в создании сайтов? Даже если вы не являетесь программистом и делаете сайт исключительно для себя, то со временем сайт будет расти и шириться. Так бывает всегда и у всех. Все и всегда сталкиваются с одной и той же проблемой — при добавлении нового раздела сайта, а следовательно и нового пункта меню, нужно, что бы измененное меню появилось на всех страницах сайта. Все прекрасно, когда вы используете CMS, измененное меню «само собой» появится на всех страницах сайта, но как быть, если вы, по какой-то причине, использовали статические страницы, сохраненные с расширением *.? Такое бывает довольно часто, даже в наше время, когда, казалось бы, все используют различные CMS.

Отличным решением проблемы будет разделение страницы сайта на модули.

В этом случае есть два, наиболее простых, варианта решений:

  • использовать
  • использовать
  • использовать PHP

Первый способ, с использованием SSI можно обнаружить по следующему адресу:

SSI в примерах

Второй способ будет описан на данном сайте позднее.

Третий способ, с использованием PHP рассмотрим далее.

Использование PHP при разделении страницы сайта на модули:

Во-первых, для того, что бы использовать возможности языка PHP ваш хостинг должен предоставлять такую услугу, во вторых файлы, которые будут содержать инструкции PHP должны иметь расширение *.php и в третьих, инструкции, внутри файла должны быть заключены в конструкцию:

С помощью PHP можно подключить файл как обычную функцию, при этом содержимое файла будет обработано как если бы он был автономным PHP сценарием. При этом все функции, определенные в подключаемом файле можно использовать как внутри файла в котором происходит подключение, так и в любых других подключенных файлах. И называется эта .
При разработке простого сайта-визитки удобно разделить уже сверстанный макет сайта на логические части/модули. Например можно разделить макет на три части: header, footer и content. В первых двух модулях будут содержаться куски HTML кода, которые на всех страницах сайта изменяться не должны, что логично, ведь дизайн должен быть неизменным во всех разделах сайта. Изменяться будет только та часть, которая содержит контент.
Во-первых данный подход существенно снижает риск допустить ошибку верстки, так как готовые файлы header и footer уже не будут подвергаться изменениям, а во-вторых, при внесении изменений в дизайн достаточно будет изменить только два файла, не затрагивая файлы содержащие контент, это особенно актуально, когда ваш сайт содержит хотя бы более десяти страниц.

В своем примере я разделил сайт на четыре модуля. В одном файле я буду хранить функции, которые стану использовать на сайте, в других двух файлах будет часть до и после контента и третья часть — контент.
При этом я буду загружать нужный контент динамически, точнее за меня это сделает PHP.
Мой основной файл, index.php, будет содержать следующий код:

Сперва я подключил файл содержащий функции, затем все остальное. Поскольку PHP язык линейный, то я подключаю файлы, содержащие части верстки в той последовательности, в которой они были изначально, до разделения.
Вы заметили, что я использую функция page_name(). В данной функции я определяю — какой файл запросил пользователь и подключаю его.
Код данной функции выглядит следующим образом:

 

Сперва функция получает из строки адреса имя файла, который следует подключить в части контента. Эти данные попадают в адресную строку при клике по ссылке, в меню, так как я указываю такую конструкцию:

 

То есть в строке адреса содержится информация о том, что некая переменная p имеет значение равное тому, что идет после знака «равно». Соответственно при клике на ссылку «Обо мне» пользователь перейдет в корень сайта(на главную страницу) и в строке адреса будет передан параметр p со значением about, поэтому вместо текста, главной страницы пользователь увидит текст страницы «Обо мне«, а при клике на «Контакты«, значение будет равно contacts и текст страницы будет соответствующим. В первой строке функции как раз говорится, что:  нужно получить значение переменной p из адресной строки и поместить это значение в переменную $page.

Как мы видим, ссылка на главную не содержит никаких параметров, но тем не менее необходимость подгрузить какой-то контент остается и для этой цели применяется условный оператор, который помещает в переменную $page значение равное слову «main«. Затем функция возвращает результат своей работы, а именно возвращает значение переменной $page, которое подставляется в то место, где была вызвана функция, а именно в 4-ю строку файла index.php, в которой загружается соответствующий файл. Для главной, при отсутствии параметров, main.php, для «Обо мне» — about.php , для «Контакты» — contacts.php.

Выделение активного раздела

Для того, что бы выделить тот раздел который в данный момент просматривается достаточно добавить к ссылке какой-нибудь класс, который будет визуально изменять эту ссылку. Для того, что бы добавить класс можно написать функцию:

Данная функция точно так же получает из адресной строки значение переменной p, а за тем сравнивает это значение с тем, что было передано в функцию в качестве ее параметров и если эти значения совпадают, то функция возвращает строку, содержащую конструкцию определяющую атрибут класса в html.


Далее, значение, возвращаемое функцией, выводится в том месте, где эта функция была вызвана.

Предположим, что пользователь просматривает раздел «Обо мне«, значит в адресной строке находится нечто следующее: http://mysite.ru/?p=about и следовательно программа обработчик идя по коду и встречая на своем пути PHP код делает проверку. Когда обработчик встречает функцию без параметра — current_page() он сверяет то, что в адресной строке и то что передано в функцию в качестве параметра. Поскольку в адресной строке значение p чему-то равно, то в данном случае функция ничего не возвращает. Затем следует та же функция, но уже с параметром, равным «about» и сравнивая это значение со значение в адресной строке оказывается, что значения равны и следовательно функция возвращает строку  class="current", таким образом получается, что при просмотре HTML кода страницы мы увидим, что для ссылки на раздел «Обо мне» определен класс — <a href="/?p=about" class="current">Обо мне</a>. Ну и в последнем случае, когда встречается функция current_page('contacts'), она ничего не возвращает, так как значение параметра функции не соответствует значению переменной из адресной строки.

Это простейший вариант решения задачи. Так как в примере используется всего три пункта меню, решение было «в лоб», но если пунктов меню больше, то удобней использовать цикл, для вывода меню.

Пример такого цикла приведен ниже:


Разумеется, для того, что бы не возникало ошибки, на сервере должны быть файлы, которые имеют имена в соответствии с использованными параметрами.

Вам будет интересно...

Добавить комментарий