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

26 December 2020

Любой серьёзный движок никогда не будет смешивать в своём коде 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-файлов, надеюсь, Вы осознали.