Как использовать файлы TPL
Относительно недавно я писал о том, как создать свой движок для сайта. И там я сказал, что для HTML-кода надо создавать специальные файлы-шаблоны, которые имеют расширение tpl. Однако, один из моих посетителей попросил меня поподробнее рассказать о том, как использовать файлы tpl. И в этой статье я постараюсь подробно рассказать о том, зачем нужны файлы tpl, как их использовать, и приведу небольшой пример.
Файлы tpl используются для написания в них HTML-кода, который впоследствии будет "вытащен" PHP и выведен пользователю на конкретных страницах. Например, в файле tpl может быть форма регистрации. То есть просто HTML-код обычной формы, ничего больше. В другом файле tpl может быть блок с панелью пользователя. В этой панели идёт "Приветствие пользователя" по имени, различные ссылки на редактирование профиля, а также кнопка выхода. Это всё примеры, где регулярно используются файлы tpl.
Однако, есть один очень важный нюанс. Рассмотрим поподробнее файл tpl с панелью пользователя. Я написал, что там идёт приветствие пользователя по имени. Но файл один, а пользователей очень много (следовательно, и имён много). Глупо создавать для каждого пользователя отдельный файл, где жёстко прописано его имя. Поэтому в файлах tpl используются специальные элементы - шаблонизаторы. Они записываются примерно в таком виде: {username}. Давайте приведу пример файла tpl, где используется шаблонизатор {username} (пусть файл называется user_panel.tpl):
<div>
<p>Здравствуйте, <b>{username}</b>!</p>
<p><a href = 'editprofile.php'>Редактировать профиль</a></p>
<p><a href = 'editprofile.php'>Выход</a></p>
</div>
Как видите, никаких <html>, <head> и <body> здесь нет. Только тот HTML-код, который отвечает за панель пользователя.
Теперь напишем PHP-код, который этот tpl-файл обрабатывает:
<?php
$username = "Пётр"; //Разумеется, это имя Вы должны сначала откуда-то взять, например, из базы данных
$user_panel = file_get_contents("user_panel.tpl");
$user_panel = str_replace("{username}", $username, $user_panel);
echo $user_panel;
?>
Как видите, всё очень и очень легко. Мы здесь получили содержимое файла user_panel.tpl, а затем с помощью функции PHP str_replace() заменили {username} на конкретное имя пользователя.
Это основа, которую необходимо знать для использования tpl-файлов. Далее Вы должны теперь понять, что страница будет собираться по кирпичикам, выводя все tpl-файлы в нужном порядке. Главное преимущество такого подхода, что разделяется программная часть и дизайнерская, благодаря чему становится крайне легко изменять дизайн и код PHP независимо друг от друга.
-
- Михаил Русаков
Комментарии (22):
Михаил, я конечно, ещё не настолько овладел знаниями в области программирования, изучая платный курс(за который тебе отдельное спасибо), но сдается мне, что в написанном коде есть пара, скорее всего, опечаток.. :)
Ответить
Михаил ! вопрос таков... просто не знал где его задать решил тут раз уж применяю tplы... вот к примеру у меня есть переменная имени "$login" и на экране выводится именно к примеру "Олег" А как вот его просклонять правильно ведь не ко всем именам подойжет префикс после его логина к примеру Сообщение от "Олег" - не очень смотрится=((( Как это реализовать?
Ответить
Это сделать можно только для конечного числа имён. Реализовать это для всех имён не получится. Соответственно, Вы для каждого имени склоняете под всеми необходимыми падежами, а потом вытаскиваете нужный падеж (например, взятый из параметра функции).
Ответить
Нет там опечаток, кроме той что тег <b> не работает с версии 4,1 HTML
Ответить
Ты это мне написал? Ты видел дату моего поста??
Ответить
Спасибо за статью, помню я как раз и не разобрался с шаблонизаторами и фигурными скобками.
Ответить
Здравствуйте, Михаил. Есть вопрос. Например есть tpl файл для боковой панели. В боковой панели есть подобие виджетов. Они одинаково выглядят и для них я так же сделал один tpl файл. Вот tpl виджета: <div class=widget> <h3>{title}</h3> {text} {bottomtext} </div> Как мне с помощью одного tpl для виджета выводить например 3 виджета?
Ответить
Через цикл.
Ответить
Так если я буду в цикле с помощью str_replace() изменять значения {title} {text} и т.д. то они будут меняться для всех виджетов...
Ответить
for(...) $text .= str_replace(...); И вот в $text и будут все 3 виджета.
Ответить
Скажите, пожалуйста, а как связан tpl с версткой? Вот мы создали такой блок: <div> <p>Здравствуйте, <b>{username}</b>!</p> <p><a href = 'editprofile.php'>Редактировать профиль</a<</p> <p><a href = 'editprofile.php'>Выход</a></p> </div> а в каком файле настраивается его вид?
Ответить
Сначала делается вёрстка, а уже потом эта вёрстка разбивается на куски и отправляется в tpl-файлы.
Ответить
Спасибо! Это я понимаю,но в самом же ptl файле не прописывается графика, содержимое и их свойства, и расположение на странице?
Ответить
Туда прописывается HTML-код, а это и есть всё то, что Вы написали.
Ответить
У Вас опечатка в коде - надо не <div> <p>Здравствуйте, <b>{username}</b>!</p> <p><a href = 'editprofile.php'>Редактировать профиль</a<</p> <p><a href = 'editprofile.php'>Выход</a></p> </div>, а <div> <p>Здравствуйте, <b>{username}</b>!</p> <p><a href = 'editprofile.php'>Редактировать профиль</a></p> <p><a href = 'editprofile.php'>Выход</a></p> </div>
Ответить
Спасибо, исправил!
Ответить
Михаил, можете написать статью, где будет описпно, как создать класс для подключения шаблона(типа template).
Ответить
Замечательная статья, Михаил! Не смотря на то, что я не полностью помню базу php, я строчки этого примера разобрал и наизусть запомнил. Именно самого образца - примера, мне не хватало для понимания вывода значений и обработки скобок фигурных. То есть по сути, замены username на конкретное значение - имя. Я думаю, что это всего лишь капля в море, того, что я узнал из этой статьи. С уважением, Сергей.
Ответить
Привет Михаил. Конечно, огромное спасибо тебе за твои уроки (бесплатные, на курсы денег нет к сожалению ), вот 3-е сутки практически без сна сижу и пытаюсь понять как использовать ООП. Процедурное программирование конечно хорошо, но в ООП я увидел компактность пользования. Ну так вот, вот код шаблонизатора(--- function articles(){ $mysqli = connectDB(); $result_set = $mysqli->query("SELECT * FROM news"); closeDB($mysqli); return shotStoryArray($result_set); } function shotStoryArray($result_set){ $results = array(); while (($row = $result_set->fetch_assoc()) != false){ $results[] = $row; } return $results; } $result = articles(); for ($i = 0; $i < count($result); $i++){ $file = file_get_contents("templaters/mytemp/index.html"); $file = str_replace('{title}',$result[$i]['title'],$file); $file = str_replace('{desc}',$result[$i]['description'],$file); $file = str_replace('{fulltext}',$result[$i]['fulltext'],$file); $file = str_replace('{author}',$result[$i]['autor'],$file); print ($file); } ---) Шаблонизатор работает как надо, но как его в КЛАСС загнать никак не могу понять. и еще такой вопрос как передать в переменную все файлы шаблона из каталога. что бы не писать для каждого шаблона отдельный код и теги а просто написать строку $file = file_get_contents("templaters/mytemp/index.html"); и там где index.html подставить переменную допустим $filename в которую записаны все файлы шаблона?
Ответить
Вы используете tpl-файлы просто, чтобы максимально отделить php код от html кода, или есть еще плюсы использования tpl-файлов? Может с ними код быстрей работает? Есть ли разница между использованием php+tpl-файлов и html+вставки php кода?
Ответить
Знаете, разница есть. Представьте что Вы делаете блог или новостной портал, Вам без шаблонизатор и tpl не справились. Вот смотрите, к, примеру вы сделали сайт и без шаблонизаторов и tpl файлов, в таком случае Вам понадобится в место элементов шаблона %username% ставить в html код вот такие конструкции: <?php echo "$name"; ?> или такую конструкцию, покороче: <?=$name;?>, а когда Вам захочется поменять шаблон, то тяжело будет сделать - это без шаблонизаторов, к тому же в добавок, чтобы поменять шаблон, Вам и в программный код влезать нужно будет. Что насчёт быстрой загрузки страниц... Тут можно использовать кеширование страниц сайта, или использовать Ajax на полную катушку с javascript.
Ответить
Простите за выражение, но это фигня полная... Для file_get_contents не имеет значение какое расширение у файла... да и вообще расширение не обязательно... "user_panel", "user_panl.txt", "user_panel.html" - ровным счетом одно и тоже... Почему tpl ? Просто для удобства! tpl = TemPLate, что переводится как "шаблон"!
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.