Реализация шаблонов на PHP


Разделение PHP и HTML кода, использование шаблонов

При написании кода на PHP может возникнуть потребность создать в коде элемент на HTML. Начинающие разработчики пишут HTML код прямо в файле с PHP кодом, просто заключая его в кавычки и заменяя в нем переменные данные. Конечно, такой способ прост, позволяет не отвлекаться на дополнительную работу по разделению PHP и HTML. Но это неправильно, необходимо весь HTML код выносить в отдельные файлы – HTML шаблоны.

Почему необходимо отделять HTML от PHP? Причин может быть несколько:

  • смешивание кода HTML и PHP в одном файле выглядит некрасиво;
  • нет подсветки HTML синтаксиса, загромождается код PHP – ведь обычно HTML код занимает довольно много места;
  • невозможно повторное использование HTML кода в других местах веб-приложения;
  • когда будет необходимо вносить изменения в HTML – придется долго искать этот участок кода в файле с PHP кодом.

На сегодняшний день для выполнения такой задачи разработаны различные шаблонизаторы, которые как раз созданы для отделения кода от верстки. Но не всегда есть желание использовать что-то стороннее, да и к тому же средствами PHP можно самому реализовать простую систему шаблонизации. Как это сделать?

Для примера создадим файл с расширением tpl, в котором будет храниться HTML код. Это и будет наш шаблон, расширение файла можно сделать любое, tpl здесь просто для примера. Соответственно в редакторе кода можно задать подсветку синтаксиса HTML для этого расширения (к примеру в Notepad++). В этом файле прописываются нужные переменные, которые необходимо будет заменить на нужные данные. Пример шаблона:

Далее создаем некоторую функцию, например – myfunction, в которой есть данные и путь к шаблону:

Наконец, необходимо создать функцию get_html, которая будет выполнять работу по подключению указанного шаблона и заменять в нем данные. Функция принимает два параметра: путь к шаблону и данные. В цикле происходит проход по всему содержимому массива data и создаются переменные. Затем включается буферизация и подключается шаблон, в котором используются вышесозданные переменные. В завершении прекращаем процесс буферизации и возвращаем готовый HTML код. Примерный код приведен ниже:

Таким образом, отделить HTML от PHP кода без использования сторонних шаблонизаторов не составит труда. Использование шаблонов позволит сделать разработку проекта более удобной и правильной.

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

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

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

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

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

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

Немного о коде. В данном случай файл index.php у нас будет являться обработчиком запроса на сайт. При этом всегда будет выводится содержимое файла header.php, footer.php, s >

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

Файл описания шаблонов сайта .templates.php

Файл .templates.php определяет шаги Выбор группы шаблонов, Выбор шаблона и Установка шаблона в цепочке шагов мастера создания сайта. Если в папке мастера нет файла .templates.php, то шаги Выбор группы шаблонов, Выбор шаблона и Установка шаблона отсутствуют. Группа шаблонов предоставляет возможность сгруппировать шаблоны сайта, например, по тематике или компоновке (layout).

В файле .templates.php описываются шаблоны, находящиеся в поддиректории templates папки мастера. В поддиректории templates должны находиться папки шаблонов сайта. Данные (название, описание, скриншоты шаблонов сайта) для шага Выбор шаблона берутся из файлов (description.php, screen.gif и preview.gif), находящихся в папке шаблона.

Если в поддиректории templates есть шаблоны сайтов, а файл .templates.php отсутствует, то шаги Выбор шаблона и Установка шаблона все равно добавятся в цепочку шагов мастера создания сайта.

Структура типичного файла .templates.php такова:

В файле .templates.php определяется массив $arWizardTemplates, имеющий следующие ключи:

  • «GROUPS» – значением этого ключа является массив групп шаблонов. Если этот ключ не определён, шаг Выбор группы шаблонов отсутствует в цепочке шагов мастера создания сайта. Массив групп шаблонов состоит из элементов следующего вида:
  • «TEMPLATES» – значением этого ключа является массив шаблонов. Массив шаблонов состоит из элементов следующего вида:

Пользовательские комментарии

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

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

Разработка CMS с нуля. Часть 5.1: Пишем шаблонизатор

Тут мы видим файл Conversion.php — файл конфигурации шаблона, шаблон главной страницы index_template.tpl , всех остальных страниц page_template.tpl и пять файлов подключаемых шаблонов. Так же присутствую папки img и styles для изображений и стилей соответственно.

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

  • dir — имя папки с шаблонами
  • template — имя используемого шаблона

Готово? Переходим к тестированию.

UPD 25.03.17:
Что-то я косякнул, и забыл выложить список кодов ошибок для нашего обработчика handler.php , исправляю это недоразумение. В классе обработчика необходимо дополнить функцию engineError следующими строками:

Теперь, при срабатывании функции, будет выводиться нужное сообщение, вместо «Неизвестная ошибка».

Как сделать шаблонизатор на php?

Придерживаюсь мнения что лучщий шаблонизатор для PHP это сайм PHP но есть вопрос: как его правильно реализовать.
Ну т.е. условно страница у нас отрабатывает и есть набор данных в аккаунте которые нужно показать пользователю:
title страницы, имя юзера, баланс, таблица с данными.
Вот где почитать как архитекрутно правильно это сделать?

Мастер Йода рекомендует:  Перестаньте изобретать изобретенное 8 полезных PHP библиотек, которые заменят ваши велосипеды

Да понятно MVC, но. у меня нет контроллера. Запрос приходит на роутер, который определяет какой вызывать класс обработчик (это жирная модель по сути), класс всё готовит и должен выплюнуть результат в шаблон по идее. Передавать шаблонизатору он через массив вероятно всё будет, но как это лучше делать, как определить для этого набора данных можно использовать сущствующий шаблон или надо создавть новый? Как таблицы шаблонизаирова если в одной 3 столбца, в другой 5? Или 4 и 4, но у первой первый столбец должен быть 70% а у второй последний?


  • Вопрос задан более двух лет назад
  • 2361 просмотр

Сначала — зачем нужен шаблонизатор. Тут подмена понятий. Скорее вопрос такой: как отделить вывод от заголовков. Если не отделять, то может быть такая ошибка

Проблема решается, если вывод HTML делать после вывода заголовков. Например, использовать буфер

Однако так придётся писать в каждом месте, где формируется HTML. Можно ли сократить?

Простейшее представление через буфер

А дополнительно ещё решают проблему отделения логики от формирования интерфейса. Работа с внешними данными в одном месте, а отображение их — в другом. Для этого в представление передают всё, что нужно показать. И точка. Лишних данных там не надо. В некоторых фреймворках стоит Exception если представление начнёт работать с базой данных, читает данные из входного запроса или пытается отправить заголовки.

Не правда ли, с представлениями код становится значительно изящнее. А если логика для реализации представлений хранится в отдельном файле-библиотеке, то код становится короче и понятнее.

В фреймворках вместо функции render может использоваться объектная реализация

Как таблицы шаблонизаирова если в одной 3 столбца, в другой 5?

Никто в представлениях не запрещает использовать языковые конструкции. Это могут быть конструкции языка PHP или какой-нибудь другой язык, специально написанный для шаблонизатора. Например, в Smarty, Blade, Pug свои языки. Передай в представление количество колонок и сделай цикл 🙂

у первой первый столбец должен быть 70% а у второй последний?

В представлениях можно подключать стили CSS, через которые меняется отображение (колонка 70%).
У каждого представления может быть свои стили.
Если нужно, чтобы были некоторые общие стили и дополнительные, нужные только для этой страницы, используют что-то типа буферизирования вывода блока стилей.

Простейшая шаблонизация

doran7

Новичок

Установка. Переменные в шаблонах можно выводить с помощью конструкции кода типа , которая является ни чем иным, как сокращенной записью оператора echo. При этом никакого интерпретатора шаблонов не нужно.

1. Создаем шаблон, включаем в него php-код вывода необходимых переменных с данными и html-сегментами страницы.
2. В коде php-скрипта основного сборщика страницы (рендера) нужные данные, а также html-сегменты для сборки шаблонов собираем в переменные.
3. В конце скрипта рендера инклюдим файл шаблона, который получит значения всех прописанных в нем переменных из скрипта рендера.

Файл шаблона tpl.html

Файл основного скрипта (рендера) main.php

герр M:)ller

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

1. Layout, (его конечно можно сделать и такими средствами, но проблемы очевидные) иногда я хочу использовать layout иногда (в случае с ajax) нет. (механизм должен быть явно сложнее)
2а. безопасность, это активный код, а значит при возможности (верстальщик к примеру) туда можно внедрить опасный код который обработается на уровне сервера.
2b. безопасность, постоянно чистить некоторые переменные к примеру $content c помощью htmlspecialcars на возможность внедрения html тэгов (xss).

но для начала лучше так, чем все вперемешку.

doran7

Новичок

WMix, благодарю за ценные замечания. Про расширение .phtml ничего особо не нашел, кроме того что в Zend Framework по умолчанию используются шаблоны вида .phtml. Думал о том чтобы шаблону дать другое расширение, например .tpl, но и про .tpl никакого толкового описания пока не нашел. Конечно шаблон с расширением .phtml лучше воспринимается, чем с расширением .html.

Насчет Layout (макет?) — не врубился до конца, что ты под этим имеешь в виду. я пока малограмотный в этих делах.

Насчет 2а. Безопасность — да, ее надо продумывать, о ней пока не думал совсем в этом подходе. Хотя верстальщик и программист предполагается как одно лицо, для такой простейшей шаблонизации.

Насчет 2b. Если $content будет браться из БД, а заноситься в БД опять же, только программистом — тоже надо чистить? Если будет заноситься в БД через форму пользователем сайта — тогда надо чистить по полной, и применять все возможные меры безопасности.

Продолжение. Как включать в такой шаблон данные через переменные мне, в основном, понятно. Но ведь можно в такой шаблон включать через переменные и части (блоки) html-страницы. А это я еще не продумал, как.

Например, включить простое меню.

Дальше сделать шаблончик с меню menu.phtml , и либо через include как-то либо через file_get_contents вставить его в рендер, например так

герр M:)ller

вот как раз 2а пока забудь, 2б помним всегда! к примеру берем не проверенное значение. обезопасить. а вот с пунктом первым очень скоро поймешь, когда будет страниц штук 5 и будешь видеть что постоянно повторяешь кусок кода.

html это когда голый html — мы понимаем что этот кусок можно вывести простым echo (echo file_get_contents(‘. html’) )
tpl это еще не хтмл но и не пхп тут подразумавается что есть обработчик типа str_replace
phtml самые первые скрипты на пхп так назывались. это как раз пхп+хтмл. и тут как раз include

Пью пиво

Фанат

oncle terrible
герр M:)ller

я с этим не согласен, ты даешь редактировать базу, пользователю (администратору или еще правильней редактору), и тут 2 варианта, либо обезопасить в самом начале при записи (я сторонюсь этого, и записываю так как попросили), или при выводе обезопасить, (вот тут мое место)!

Василий М.


Новичок
герр M:)ller

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

хотя да, в этом нет необходимости!

doran7

Новичок

Благодарю за ссылку. Но этот phpfaq.ru я не только весь просмотрел когда-то, но и весь полностью скопировал и задокументировал в формате .doc со своими пометками. Статья о шаблонах ценная, из нее много полезного почерпнул.

Остался вопрос — о грамотном применении файлов с расширением .tpl. Где бы об этом что прочитать толкового, хотя бы на английском?

Фанат

oncle terrible

вопрос непонятен.
канонического расширения .tpl не существует (по крайней мере, в мире РНР).
Любой человек может поместить любой шаблон в файл с расширением .tpl
«грамотное применение» таких файлов зависит исключительно от идей поместившего.

что конкретно имеется в виду под «грамотным применением файлов с расширением .tpl»?

doran7

Новичок

Просто я это расширение часто встречаю, в разных CMS на PHP и разных статьях. В официальном описании PHP прро эти tpl-шаблоны мало чего нашел, а от фонаря их тыкать куда попало не хотелось.

Это я упрошенно написал. Понятно, что должен быть запрос к БД с выборкой этого контента для текущей страницы и помещения этого контента в переменную в шаблоне. Конечно это все сложнее, чем в моем первом сообщении темы.

Мастер Йода рекомендует:  Что такое URL адрес и как с ним работать

В любом случае благодарю за замечания. Хочу понять, как сделать шаблонизацию примерно такую же как в MODX, по тому же принципу, но гораздо проще, за счет значительного сокращения функционала.

Фанат

oncle terrible

Это ты не упрощённо написал, а именно что ничего не понял.

Вот это самое «помещение» как, по-твоему, будет делаться?

doran7

Новичок

Примерно так. В скрипте рендера пишу такое:

doran7

Новичок

Пока для себя выделил такие правила простейшей шаблонизации

Правила шаблонизации при создании простых сайтов (из PHP-FAQ и других статей о шаблонах)

1. Код получения данных и код отображения данных надо разделять.
2. Любой вывод данных должен начинаться только после того, как для него готовы все данные. Поэтому файлы шаблонов включаются в скрипт рендера на завершающем этапе генерации страницы сайта.
3. Как следствие, любой скрипт должен заниматься только обработкой данных. После этого он может либо вызвать шаблон, передав ему подготовленные данные, или отправить какой-либо НТТР заголовок, или и то и другое вместе.
4. Каким именно шаблонизатором пользоваться — вопрос второстепенный. Самый простой и быстрый шаблонизатор — сам РНР. При создании простых сайтов шаблонизатором может быть сам PHP – это называется чистой (pure) шаблонизацией.

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

Пока для своих простых сайтов, которые делаю только для себя (не для заказчика) склоняюсь к чистой шаблонизации (средствами самого PHP), без Smarty, Twig и пр. спец-шаблонизаторов. Для меня, как новичка, на начальном этапе такой подход, возможно, будет в самый раз. Потом — жизнь покажет.

Создание собственного шаблонизатора

Дата публикации: 2014-08-18

От автора: Разрабатывая веб-приложения, очень хорошей практикой является отделение логики скрипта от его дизайна. В таком случае очень удобно выполнять всевозможные правки по дизайну, не затрагивая логики. И наоборот, изменяя логическую часть приложения – внешний вид остается нетронутым. Но при создании приложений по такой структуре возникает вопрос, как передать переменные в дизайнерскую часть? Поэтому в данном уроке мы с Вами научимся создавать собственный несложный шаблонизатор, при помощи которого можно передавать переменные из логической части скрипта в дизайнерскую.

Введение

Первым делом определимся с понятием шаблона. Шаблоны — это отдельные файлы которые занимаются выводом данных скрипта на экран. То есть они занимаются только выводом информации, при этом шаблон только получает данные для вывода и ни как их не формирует. Из этого следует, что шаблоны содержат практически чистый HTML с минимальными вставками PHP кода, который используется для отображения данных переменных, формирования условий (if — else) и описания циклов (foreach) для обхода по массивам. Шаблоны бывают самых различных видов, а вместе с тем и шаблонизаторы. Но различают два основных вида шаблонов по способу передачи данных. Первый предусматривает передачу значений обычных переменных, которые в последствии, будут выведены на экран обычным образом, к примеру, используя функцию echo:

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

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

В данном уроке мы будем рассматривать первый тип шаблонов. Так как этот тип наиболее удачен и функционален. Смотрите, язык PHP по своей структуре уже является очень хорошим шаблонизатором, так как очень легко встраивается в разметку HTML. Если же мы используем в шаблонах специальные метки (<$var>) , то для вывода данных, нам потребуется писать специальную функцию, которая отыщет все метки и заменит их, на соответствующие данные. Но что получается, PHP и так очень хорошо встраивается в PHP, а мы пишем дополнительные функции для вывода переменных на экран. Хотя можем ограничиться обычной функцией echo:

Создание шаблонов

Для сегодняшнего урока мы будем использовать следующий сайт:

Вот код файла index.php который, выводит главную страницу на экран:


» , $row [ ‘title’ ] , $row [ ‘id’ ] , $row [ ‘title’ ] , $row [ ‘date’ ] , $row [ ‘title’ ] , $row [ ‘img_src’ ] , $row [ ‘discription’ ] , $row [ ‘view’ ] ) ; > ?>

Как Вы видите в этом файле логика скрипта тесно связана с его дизайном. Поэтому давайте это исправим и создадим шаблон для главной страницы тестового сайта. Вот код шаблона:

Как Вы видите в данный файл я вынес только дизайн главной страницы сайта. Для вывода данных сайта используются обычные переменные PHP. Цикл foreach описан при помощи альтернативного синтаксиса. Обратите внимание, что код данного файла достаточно прост и состоит практически из разметки HTML, что упрощает редактирование дизайна. Данный файл я сохраняю в папку templates под именем index.tpl.php.

В свою очередь файл index.php, файл который выводит главную страницу на экран, теперь содержит только логическую часть:

Теперь, когда у нас есть шаблон, необходимо передать ему данные и вывести на экран.

Создание шаблонизатора

В качестве шаблонизатора в нашем случае будет выступать функция:

Данная функция, принимает два параметра: $tmp – имя шаблона (только имя – без расширения и строки tpl), $vars = array() – необязательный параметр – массив переменных которые необходимо передать в шаблон.

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

В данной функции проверяем, существует ли в папке templates нужный шаблон. И если он существует — то первым делом включаем буферизированный вывод, используя функцию ob_start(). При этом весь вывод на экран будет попадать в буфер обмена. Далее нужно создать переменные, которые будут переданы в шаблон. Эти переменные мы передаем в виде массива $vars. Это обычный ассоциативный массив, ключи которого содержат имена переменных, а значения, соответственно – значения этих переменных. Используя функцию extract($vars), мы создаем в памяти переменные из массива $vars. Имена которых, соответствуют ключам данного массива.

После этого необходимо только лишь подключить нужный файл шаблона, что мы собственно и делаем. При этом на экран ничего выведено не будет, так как включен буферизированный вывод. Значит необходимо очистить буфер обмена. Для этого используем функцию ob_get_clean(), она очищает буфер обмена и возвращает его содержимое, которое мы вернем как результат работы функции в целом.

Шаблоны

Введение
Отделение логики получения данных от логики их отображения — очень важная составляющая веб-девелопмента.
Любой программист, который поднялся чуть выше уровня «Hello world», начинает ощущать потребность в таком разделении. Но далеко не все приходят к правильным выводам и решениям.
Поэтому я приведу здесь самые важные правила:
1. Код получения и код отображения данных надо разделять.
2. Любой вывод должен начинаться только после того, как для него готовы все данные.
3. Как следствие, любой скрипт должен заниматься только обработкой данных. После этого он может либо отправить какой-то НТТР заголовок, или вызвать шаблон, передав ему подготовленные данные, или и то и другое вместе.
4. Каким именно шаблонизатором пользоваться — дело десятое. Самый простой и доступный — сам РНР, поэтому примеры будет приводиться на нём.

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

Самое простое и очевидное заблуждение состоит в том, что новички называют шаблоном вынесенный в отдельный файл «дизайн» — общий html для всех страниц сайта. И на этом успокаиваются. Динамическую информацию, ничтоже сумняшеся, выводя старым добрым echo 🙂
На самом же деле, шаблонизатор в основном занимается выводом изменяющегося содержимого страниц сайта. А вывод «дизайна» — задача второстепенная.

Мастер Йода рекомендует:  Работа с числами и математическими методами в JavaScript

Фантазий же главных две:
1. Шаблоны нужны «дизайнеру», чтобы он мог их править, не разбираясь в PHP.
2. Следовательно, шаблоны служат для отделения PHP от HTML.

Давайте попробуем задуматься над первым утверждением. Кто такой дизайнер? Это человек, который работает в фотошопе. HTML он чаще всего не знает вообще. А над шаблоном работает либо специальный верстальщик или — чаще всего. сам программист! Смешно, правда?
Теперь следствие, про отделение PHP от HTML. Отлично. Перед нами стоит святая цель отделить. Поэтому мы придумываем Смарти и пишем:
<$con.name>—

Ещё смешнее.
«Дизайнер», ради которого все затевалось, падает в обморок от счастья.

Теория
Получается, что наши причины, по которым мы решили пользоваться шаблонами, гроша выеденного не стоят. И что же теперь — не нужны, выходит, шабоны вообще? Нужны. Но сначала надо ответить себе на вопрос — «зачем?» Для чего нужны шаблоны. И проверить ответ практикой. Я много раз задавал людям этот вопрос. Но почти никто не может на него ответить. Зачем ему нужны шаблоны. Получается, люди делают что-то, не зная зачем.
Это — самое смешное.

За время своей деятельности в качестве веб-программиста я сформулировал для себя три причины, по которым нужны шаблоны лично мне. По сути, их две. А сводятся, в конечном счете, к одной:

Один код — несколько представлений.

Часто бывает так, что вместо одной информации надо показать другую. Например, код работы с БД получает вместо текста новости сообщение об ошибке. В этом случае вместо страницы новости нужно показать совсем другую — с извинениями и просьбой зайти позже. С помощью шаблонов это делается элементарно.

Часто одну и ту же информацию надо показывать в нескольких видах. К примеру — обычная страница и страница для печати. Информация та же самая, код её получения один и тот же, а код вывода — разный. Столкнувшись с такой ситуацией, очень быстро разделишь свой код на две части, одна из которых отвечает за вывод, а вторая — не отвечает. Еще пример: допустим, нам захотелось выводить информацию не напрямую в HTML, а через AJAX-запрос, в формате JSON. Если у нас использовался шаблонизатор, то мы меняем в нашем коде ровно одну строчку — вызов шаблонизатора на вызов json_encode() . А если бы у нас вывод был перемешан с кодом получения данных, то код бы пришлось переписывать весь!

В чем-то похожая ситуация: допустим, наш скрипт стоит на двух сайтах. Плюс копия у нас дома. И вот дома мы нашли крупную багу. Заделали её. Теперь надо обновить код на сайтах. И вот он — момент истины: если шаблоны были использованы правильно, то мы просто заливаем код на оба сайта, и все продолжает работать, как ни в чем не бывало! Такая ситуация, как я считаю — идеальная проверка выбранного подхода к шаблонизации.

Ещё один важный момент, который многие упускают (в своих теоретических рассуждениях, при этом постоянно сталкиваясь с ним на практике!) — порядок выполнения скрипта не всегда совпадает с порядком вывода в шаблоне. Хрестоматийный пример — вывод заголовка статьи в теге . Если мы выводим информацию по мере поступления, то просто не сможем этого сделать — шапка сайта уже выведена, к моменту, когда мы начали получать текст новости.

Следует также помнить, что кроме текста РНР скрипты еще и выводят HTTP заголовки. Которые обязаны выводиться до любого текста, или даже вместо текста вообще (если мы например хотим перенаправить пользователя на другую страницу). Если мы сначала реализуем логику работы приложения, ничего не выводя при этом, то выдать нужный НТТР заголовок не составит для нас никакой проблемы.

У вас могут быть и свои причины использовать шаблоны. Но только с одним условием — эти причины должны быть вызваны реальной, жизненной необходимостью, а не «высшими соображениями» и заботой о каких-то неизвестных вам людях.

Практика
Теперь от теории перейдем к практике.
В самом простом случае в показе любой страницы у нас всегда будут участвовать два шаблона: общий шаблон сайта и шаблон контента конкретной страницы.
Допустим, мы хотим сделать страницу со ссылками на сайты друзей.
В этом случае код упрощенный код будет выглядеть так:

сам файл links.php. НИЧЕГО не выводит. Только готовит данные и после этого вызывает шаблон.
//инклюдим настройки.
include ‘settings.php’ ;

//получаем данные из базы, определяем переменные
$pagetitle = «Ссылки» ;
$DATA = $db -> getAll ( «SELECT * FROM links» );

Шаблонный метод на PHP

Шаблонный метод — это поведенческий паттерн, задающий скелет алгоритма в суперклассе и заставляющий подклассы реализовать конкретные шаги этого алгоритма.

Особенности паттерна на PHP

Сложность:

Популярность:

Применимость: Шаблонные методы можно встретить во многих PHP-фреймворках. Разработчики создают такие методы, чтобы позволить клиентам легко и быстро расширять стандартный код при помощи наследования.

Признаки применения паттерна: Класс заставляет своих потомков реализовать методы-шаги, но самостоятельно реализует структуру алгоритма.

Концептуальный пример

Этот пример показывает структуру паттерна Шаблонный метод, а именно — из каких классов он состоит, какие роли эти классы выполняют и как они взаимодействуют друг с другом. После ознакомления со структурой, вам будет легче воспринимать второй пример, который рассматривает реальный случай использования паттерна в мире PHP.

Пример из реальной жизни

В этом примере Шаблонный метод определяет общую схему алгоритма отправки сообщений в социальных сетях. Каждый подкласс представляет отдельную социальную сеть и реализует все шаги по-разному, но повторно использует базовый алгоритм.

Реализация шаблонов на PHP

Добрый день уважаемые господа! В данной статье я хотел бы затронуть очень важную тему, а именно шаблоны в PHP. В этой статье я приведу простой, но работающий пример “шаблонов”, также мы рассмотрим все за и против использования шаблонов.

Прежде чем использовать шаблоны, подумайте, действительно ли они вам так нужны? В данный момент существует огромное количество коммерческих вариантов шаблонов. Все они работают по одному принципу (значение, замена), но имеют огромное количество наворотов, таких как автоматическое изменения регистра переменных, поиск по регулярным выражениям и т.д., все это конечно хорошо и легко реализуемо. Когда я решил посмотреть “коммерческий” шаблон, я ужаснулся, один его класс весил 398 КБ. Это нормально? Также в сети можно найти множество бесплатных вариантов шаблонов (классы шаблонов в PHPBB, IPB…), но все они много весят и работают не слишком быстро. Я предлагаю вам простой каркас “шаблонов” на PHP, с его помощью можно сделать свой классный шаблонизатор, со всеми необходимыми вам функциями.

Приведу вам жизненный пример, не так давно я занимался разработкой программы для одного человека, заранее было обговорено, что я пишу программу, а дизайн это его дело. Через некоторое время, мой заказчик пишет мне, что дизайн для моей программы сделать невозможно. Конечно, человек ничего не знающий в web-программировании будет испытывать огромные затруднения, при построении дизайна в PHP-программе. Главная задача ‘шаблонов’ – это облегчить жизнь дизайнеру. Безусловно, главным плюсом использования шаблонов можно считать то, что дизайнер без помощи программиста сможет изменять свой web-проект. Также мне нравится само разделение – программа и дизайн.

Я не использую шаблоны в своих личных проектах, т.к. они дают дополнительную “нагрузку”. Шаблоны это хорошо, но использовать их надо только если пишешь какой, то публичный проект или выполняешь работу на заказ.

Реализация шаблонов на PHP

И так приступим. Всего у нас будет 2 ключевых файла.

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