PHP: Как делать шаблоны

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

Язык php очень гибок, что позволяет совершать потрясающие манипуляции с информацией. Давайте рассмотрим самый простой подход к реализации шаблонов при разработке веб сайта с нуля.

Допустим мы разрабатываем сайт визитку, состоящий из шапки, подвала, сайдбара и области контента. А страницы будут у нас следующие: Главная, Контакты, Отзывы (повторюсь, что мы рассмотрим самый простой подход к реализации шаблона). Как правило шапка и подвал у сайтов статичны, сайдбар может быть различным, но мы будем рассматривать случай когда он не будет меняться в зависимости от открытой страницы. Далее делаем заключение: «Все что является статичным относится к шаблону». А значит смело в нашем проекте создаем папку tpl и в нее добавляем файлы header.php, footer.php, sidebar.php. Так же у нас есть область контента страницы, данный блок постоянно меняется, поэтому относить его к шаблонам будет ошибкой. По сути контент это и есть страница нашего сайта, поэтому создадим в проекте еще одну папку pages и добавим туда файлы index.php, feedbacks.php, contactus.php, 404.php. Не сложно догадаться за что будут отвечать данные файлы.

Теперь когда мы имеем структуру нашего сайта. Мы можем перейти к программированию. В корне проекта создадим файл index.php который будет содержать следующие строки:

<?php include 'tpl/header.php'; ?>
<table>
 <tr>
  <td>
   <?php
    if (!isset($_GET['page'])) {
     include 'pages/index.php';
    } else if (file_exists('pages/'.$_GET['page'].'.php')) {
     include 'pages/'.$_GET['page'].'.php';
    } else {
     include 'pages/404.php';
    }    
  </td>
  <td>
   <?php include 'tpl/sidebar.php'; ?>
  </td>
 </tr>
</table>
<?php include 'tpl/footer.php'; ?>  

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

Немного о коде. В данном случай файл index.php у нас будет являться обработчиком запроса на сайт. При этом всегда будет выводится содержимое файла header.php, footer.php, sidebar.php. Область контента же будет выводится по следующему алгоритму: если мы открываем сайт просто по имени домена, то попадаем на главную страницу контента (pages/index.php), если же на страницу передается параметр ?page= и существует файл в папке ‘pages’ с таким именем, то в область контента подставляем содержимое этого файла, если же ни одно условие не выполняется показываем содержимое файла pages/404.php.

Пусть сайт расположен по имени localhost, тогда localhost/?page=feedbacks будет страницей отзывов, а localhost/?page=trololololo откроет нам страницу с контентом файла 404.php.

Что же касается html разметки указанных файлов, то выглядеть она в нашем случае должна примерно так:
header.php

<html>
<head></head>
<body>


footer.php

<div>Содержимое подвала</div>
</body>
</html>

sidebar.php

<h2>Заголовок</h2>
Текст сайдбара, возможно теги и т.п.

Вот в целом то и все. Далее этот подход можно усовершенствовать как Вам угодно и удобней. Например можно разбить файлы шаблонов, на подшаблоны (например из файла header.php можно выделить menu.php). Можно усложнить процесс подгрузки страницы, тем самым избавясь от дублей страниц. Можно дописать файл .htacess чтобы не передавать параметр pages явно в строке браузера. И многое другое…

Запись опубликована в рубрике PHP с метками , , , , , , , , , . Добавьте в закладки постоянную ссылку.