<MyRusakov.ru />

PHP и MySQL с Нуля до Гуру 2.0

PHP и MySQL с Нуля до Гуру 2.0

Данный курс научит Вас программировать на самом популярном Web-языке в мире - PHP. Курс состоит из 11 разделов, в которых с нуля рассказывается и показывается процесс написания различных скриптов на PHP.

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

Почти к каждому уроку идут упражнения.

Просмотрев данный курс, Вы сможете создавать абсолютно любые PHP-сайты любой сложности.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Использование tpl-файлов

Использование tpl-файлов

Сразу скажу, что я уже писал об этой теме здесь: использование tpl-файлов. Однако, не все поняли данный материал, и я решил к нему вернуться и написать всё немного по-другому. Не секрет, что любой серьёзный движок никогда не будет смешивать в своём коде HTML и PHP. Однако, HTML и PHP коды очень тесно взаимосвязаны, поэтому для того, чтобы не нарушать правила "хорошего тона", были придуманы tpl-файлы. Данные файлы служат для хранения HTML-кода с элементами шаблонов, которые подставляются в PHP-коде. Давайте подробнее разберём использование tpl-файлов с примером.

Возьмём с Вами самый элементарный пример - это панель пользователя, где есть его аватарка и приветствие по имени. Первым делом, создадим tpl-файл, и пусть он называется userpanel.tpl. Напоминаю, что это всего лишь кусок HTML-кода с элементами шаблона:

<p>Здравствуйте, %name%!</p>
<p>
  <img src="%avatar%" alt="Аватарка" />
</p>

Ничего сложного, это просто обычный HTML-код. Только вместо определённых значений стоят %элементы_шаблона%.

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

<?php
/* Данная функция, хоть и использует буферы, но суть элементарна: вернуть содержимое файла */
  function getTemplate($name) {
    ob_start(); // Начинаем сохрание выходных данных в буфер
    include ($name.".tpl"); // Отправляем в буфер содержимое файла
    $text = ob_get_clean(); // Очищаем буфер и возвращаем содержимое
    return $text; // Возвращение текста из файла
  }
  $name = "Николай"; // Извлекается из базы
  $avatar = "avatars/user_15.jpg"; // Извлекается из базы
/* Начинается замена элементов шаблона на реальные данные */
  $userpanel = str_replace(
    array(
      "%name%",
      "%avatar%"
    ),
    array (
      $name,
      $avatar
    ),
    getTemplate("userpanel")
  );
  echo $userpanel; // Выводим окончательный результат
?>

Это простейший вариант. Всё прокомментировано, поэтому вопросов по этому примеру возникнуть не должно. И по сути любая страница состоит из таких вот блоков. Ваша задача взять нужные блоки (функция getTemplate()), заменить нужными данными (функция str_replace() и данные полученные, например, из базы), а потом просто соединить все блоки, как обычные строки, и вывести всё на страницу.

Безусловно, без ООП здесь очень проблемно будет. Вы такое количество условий наплодите (страниц же много), что быстро запутаетесь. Но принцип использования tpl-файлов, надеюсь, Вы осознали. Дальше уже самостоятельно подумайте, как всё это обернуть в ООП, чтобы всё было максимально простым с точки зрения понимания кода и его сопровождения в будущем.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (23):

ankalitkin ankalitkin 03.02.2012 23:04:09

А здесь можно было использовать file_get_contents($name.".tpl") вместо getTemplate($name)?

Ответить

Admin Admin 03.02.2012 23:16:52

Да, если Вам так удобнее. Просто я привык к буферам, в своё время с ними много работал, но file_get_contents() вполне подходит. Но я настоятельно рекомендую использовать getTemplate(), просто внутри используйте file_get_contents(). Очень часто бывают всякие повторяющиеся элементы (по типу адреса сайта), которые постоянно заменяются и их можно автоматически всегда при вызове getTemplate() сразу заменять. Это резко сокращает количество кода.

Ответить

ankalitkin ankalitkin 05.02.2012 09:19:38

Я сделал себе обработку через getTemplate, но тогда не получается сделать включение любого модуля (например опроса, формы авторизации, отдельных файлов)без PHP. Как делать include в TPL?

Ответить

Admin Admin 05.02.2012 13:37:23

Это и не нужно делать, всё должно включаться через PHP.

Ответить

dalfaine dalfaine 06.03.2012 20:34:52

а к чему именно tpl? я лично использую формат файла php - разницы не вижу

Ответить

Admin Admin 06.03.2012 21:22:32

Принято так. Можете использовать хоть txt, хоть вообще без расширения, результат будет тот же.

Ответить

p1us p1us 18.07.2012 07:53:12

не понятно зачем делать через буфер? у Вас есть похожая статья http://myrusakov.ru/php-use-tpl.html но все без буфера, не могли бы Вы пояснить почему здесь буфер?

Ответить

Admin Admin 18.07.2012 15:07:42

Чтобы не выводить содержимое файла до замены элементов шаблона. Но, как я уже писал выше, это Ваше дело - можете использовать метод из статьи, которую привели.

Ответить

malina95 malina95 24.11.2012 02:18:29

Миша, подскажи как мне потсупить? У меня есть файлы в которых выводится из базы только текст, в нём я могу делать так и проблем не будет : $template = str_replace( array( "%text%" ), array ( $index['text'].$view ), getTemplate("open") ); И у меня есть файлы в которых мне приходиться именно в основном контенте делать большие скрипты с циклами и т.д. Как мне быть с такими файлами? Делать отдельные файлы tpl? или как? А можно ли работу всего скрипта занести в одну переменную? Просто тогда мне бы не надо было создавать идентичные друг другу файлы...Подскажи плиззз

Ответить

Admin Admin 24.11.2012 09:02:11

Единственный выход - это создавать новые tpl-файлы, очень похожие на остальные. Это недостаток, но ничего не поделаешь.

Ответить

malina95 malina95 24.11.2012 14:50:11

Понятно, а почему если в файле с шаблоном стоит цикл после %text% то выдаёт ошибку?

Ответить

Admin Admin 24.11.2012 14:57:33

В файле с шаблоном не должно быть циклов.

Ответить

malina95 malina95 24.11.2012 15:21:10

А как мне тогда выводить те же самые комментарии? Надо делать их блоками?

Ответить

Admin Admin 24.11.2012 17:34:04

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

Ответить

malina95 malina95 24.11.2012 18:05:49

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

Ответить

Admin Admin 24.11.2012 19:16:59

Вот курс, там как раз всё это делается: http://srs.myrusakov.ru/php

Ответить

ghhgghhggh ghhgghhggh 17.04.2013 21:02:29

Это гениальная конструкция.Хотелось бы увидеть ещё статьи по этой конструкции. Разные варианты этой конструкции

Ответить

lion337 lion337 11.01.2014 15:38:10

Михаил, здравствуйте не могу понять вставляю php код в .tpl файл выводит пустое место, помогите разобраться почему так получается. Спасибо

Ответить

alexandrdante alexandrdante 11.01.2014 15:43:26

tpl файлы не содержат php кода Можно,конечно,в зависимости от шаблонизатора Но если шаблонизатор,как у Михаила,то .tpl файлы не содержат кода PHP весь код в обработчиках шаблонизатора

Ответить

win64 win64 13.02.2014 16:08:06

Не понимаю зачем нужны шаблоны? Я работаю с html кодом на прямую через print. Всегда делал так, а тут отказывается, что это не правильно нужны шаблоны.

Ответить

tikkiwiki tikkiwiki 18.02.2014 17:20:52

Шаблоны нужны для удобства. Когда проект большой будет - поймете.

Ответить

maks0703 maks0703 02.06.2014 13:45:33

Если не сложно, создайте статью про Smarty (шаблонизатор)

Ответить

Makcym Makcym 11.01.2015 21:25:48

По скорости работы чтение файлов не лучший вариант для php. Лучше хранить в mysql

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.