Template php что это

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

Вступление.

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

Использование шаблонов.

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

За и против.

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

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

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

Листинг файла file2compile.tpl:

Листинг файла template.php:

Теперь я подробно опишу содержание этих двух файлов.

Файл: file2compile.tpl

Тут приведен обычный HTML код. В данном файле можно найти переменные вида. Это как раз именно те переменные которые мы будем заменять на нужное нам значение.</p><h2>Файл: template.php</h2><p>Мы имеем PHP класс, разделенный на 3 функции. В самом начале файла мы объявляем классовые переменные.</p><script data-noptimize="" data-wpfc-render="false">fpm_start("true");</script> <p>Теперь перейдем к описанию функций.</p><h2>Функция: get_tpl</h2><p>В качестве аргумента функция принимает имя файла. В теле функции мы проверяем задан ли аргумент и существует ли файл. Если аргумент не задан и файл не существует мы возвращаем значение FALSE. В противном случае мы заполняем классовую переменную(template) содержанием файла.</p><h2>Функция set_tpl</h2><p>Функция принимает 2 значения, это переменная (напр.<TITLE)>и значение на которое мы будем ее заменять.</p><h2>Функция tpl_parse</h2><h2>Использование класса.</h2><p>Для вывода на экран используйте следующие команды:</p><h2>Заключение.</h2><p>Надеюсь, моя статья поможет вам лучше понять, что такое шаблоны.</p><p><a href="http://codenet.ru/webmast/php/templates-about.php" target="_blank" rel="noopener">Источник</a></p><h2>Работа с Шаблонами</h2><p>Фуух, наконец-то я решил проблему шаблонов :). Я перепробовал многие классы, такие как, FastTemplate, IT[X] — IntegratedTemplate (PEAR), но большинство из них, либо слишком громоздкие (IT), либо с ошибками, например у меня не получилось использовать динамические шаблоны в FastTemplate. Мой класс, естесственно, не является сразу решением многих проблем шаблонов, но хотя бы, избавляет от некоторых из них, т.е. отделение кода от представления, что является очень важным для хотя бы более менее крупного сайта. Мне кажется приводить здесь весь класс не стоит, т.к. Вы можете его скачать и посмотреть, а здесь, я лишь привожу его описание с комментариями и примерами. Итак,</p><h3>1. Описание класса.</h3><p>1.1. Создание объекта.</p><p>1.2. Загрузка шаблонов.</p><p>Примечание: в более новой версии, подгружать шаблоны при старте скрипта необязательно, т.к. ф-я get проверяет загружен ли шаблон, если нет, то загружает. Это, на мой взгляд, лучше, т.к. загрузка лишних шаблонов при старте скрипта, понижает его скорость.</p><p>1.3. Получение содержимого шаблона.</p><h3>2. Примеры.</h3><p>2.1. Простой текст. Функции.</p><p>В браузере в обоих случаях появится:</p><p>2.2. Использование переменных.</p><p>2.3. Таблицы. Вывод результатов.</p><p>Результат будет следующим:</p><p>2.4. Применение буферизации.</p><p>Представляете, если уже есть большие участки кода (php/html), где идет прямой вывод в бразуер, т.е. такие функции, как print/printf/echo. Не переписывать же, например, целый скрипт. Есть решение — использование буферизации, т.е. перехват выходного потока. Пример:</p><h3>3. Приложения.</h3><p>3.1. Редактор для шаблонов.</p><p><a href="http://www.internet-technologies.ru/articles/rabota-s-shablonami.html" target="_blank" rel="noopener">Источник</a></p><h2>Ещё раз о шаблонах</h2><p>Рано или поздно девелоперу, создающему сайты статусом выше «сайт-визитка», приходится сталкиваться с таким понятием как «шаблоны» или «шаблонизация» визуального представления (не шаблоны проектирования). Что это такое? Механизм шаблонов позволяет отделять визуальное представление веб-приложения (по-скольку работаю только с веб-приложениями, то и рассуждать буду в этом контексте) от бизнес-логики таким образом, чтобы при изменении, например, внутренней логики попутно не приходилось переделывать всю html-верстку. На этом поприще уже давно существует несколько отдельно стоящих флагманских решений, позволяющих создавать довольно гибкие приложения в плане разделения труда дизайнеров-верстальщиков и программистов, а также предотвращать запутанность кода в больших приложениях. Описывать все их нет смысла. Это уже сделано до меня и не один раз. Помимо этого, почти каждая CMS и фрэймворк имеет собственные решения для отделения логики приложения от логики представления.</p><p>Действительно, встраивая все тот же Smarty в весьма простой по функционалу сайт, разработчик попросту тратит время. А время, как известно, — деньги. Да и в большинстве случаев заказчику безразлично на каком шаблонизаторе будет работать его сайт. Заказчик больше печется о затраченном времени.</p><p>Что же делать, если сайт не «визитка», но и не второй Amazon? Лично я считаю, что в этом случае оптимальное решение проблемы — воспользоваться своей самописной системой шаблонов, весь функционал которой, заточен только для решения узкого круга задач, необходимых для текущего ресурса. Впоследствии вы, возможно, выведите свою «формулу» универсального шаблонизатора с неким минимальным набором функций, расширяемую по мере необходимости в отдельно взятом проекте.</p><p>Может показаться, что автор сей статьи весьма скептически относится к Smarty и другим шаблонизаторам. Это не так. Я довольно долго работал с проектом, в котором роль шаблонизатора выполнял все тот же Smarty. И хочу заметить, мне весьма понравилось использование этой системы шаблонов в контексте обширного по функционалу проекта.</p><p>Перейдем от слов к делу.</p><p>Рассмотрим простейший класс, который состоит всего из трех методов.</p><p>Давайте рассмотрим пример с применением этого класса. Создадим следующую структуру каталогов:</p><p>/wwwroot <br />| <br />— /classes <br />| — Template.php <br />— /templates <br />| — Main.tpl <br />| — Catalog.tpl <br />| — Product.tpl <br />| — Index.tpl <br />| — 404.tpl <br />|— index.php</p><p><strong>Main.tpl</strong></p><p><strong>Catalog.tpl</strong></p><p><strong>Product.tpl</strong></p><p><strong>Index.tpl</strong></p><p><strong>404.tpl</strong></p><p><strong>index.php</strong></p><p>Вывод: не стремитесь во всех проектах, которыми вы занимаетесь, использовать навороченные библиотеки шаблонизаторов, предоставляющих большое обилие всевозможных инструментов, в большинстве случаев не используемых в должном объеме. Лучше всего написать свое решение, которое поможет сэкономить время, системные ресурсы, а главное — нервы останутся в порядке.</p><p><a href="http://habr.com/ru/post/141718/" target="_blank" rel="noopener">Источник</a></p><h2>Шаблоны в PHP для чайников</h2><p>И снова здравствуйте. Давно я как-то не писал ничего путного, даже как-то самому неприятно. Так что сразу к теме. Давайте, товарищи умники, забудем такие слова, как XML, XHTML и прочий X…, и поговорим о вещах, приближенных к реальности.</p><p>Сужествует такая «проблема», как разделение оформления и содержания, и отделение исполняемого кода от получаемого html’я. Мухи — там, котлеты — тут. Грубо говоря, программист программирует, дизайнер дизайнит и никто никому не мешает жить. А если надо поменять что-то в оформлении, то сделать это сможет один оформитель, сиречь дизайнер, самостоятельно.</p><p>PHP хорош (хорош, собака!) тем, что позволяет встраивать исполняемые конструкции прямо в html. Плюсы понятны. Минусы, например: довольно сложно менять оформление в таком коде: echo « <b>«.$boldtext.»</b> «; Глупый дизайнер испугается и убежит, а умный программист скажет «я вам не глупый дизайнер, чтобы ерундой заниматься».</p><p>Чего хочется в идеале? Чтобы была html-страница, где все, как у людей: здоровые, полноценные html-тэги, а в тех местах, где выводится информация, стояли специальные, простые, понятные как для верстальщика, так и для движка/программиста указатели.</p><p>То есть, что-то вроде такого:</p><p>Там, где стоит [TITLE], движок выводит заголовок, там, где [TEXT] — соответственно, текст.</p><p>Легко и просто. И все счастливы. И это правильно. Но! Тут и начинается маразм. Сначала пишется «движок шаблонов», что-то (я утрирую) вроде такого:</p><p>Дальше — больше. Оказывается, что в некоторых случаях этого мало. Нужно больше функций! Например, нам нужно проверять: если [TEXT] пустой, то выводить одно, если не пустой, то выводить другое, то есть, фактически, вводить уже минимальную логику отображения. И мы пишем супер-пупер наророченый язык шаблонов. На PHP. И называем его SMARTASS (Super Mega And Revolutionary Totally Automatized Shablon System).</p><p>До такой степени навороченный, что дизайнер, ради которого все затевалось, — чтобы тот смог сам менять оформления, уже не может сменить оформление пока специально не выучит язык шаблонов.</p><p>А теперь потрясем мозгами и хорошенько подумаем, что же у нас получилось. У нас получился фактически язык программирования, написанный на PHP, который можно встраивать в html-код и тем самым менять логику его (html-кода) отображения.</p><p>Поздравим друг друга. У нас получился PHP, написанный на PHP. Велосипед для велосипеда. Осмысление этого придет позже.</p><p>А теперь возвращаемся к первому примеру.</p><p>Помните? Сравним его со следующим примером и попробуем найти кардинальные различия.</p><p>То есть следующий пример php-страницы выведет все, как надо:</p><p>Дальше — больше. Выносим все шаблоны в отдельный файл. И пишем просто:</p><p>Ну что плохого в таком вот шаблоне страницы?</p><p>Плюсы — налицо. Для его вывода не нужно никаких дополнительных вещей. Кроме PHP.</p><p>Вот, собственно, и все.</p><p>PS. Уважаемые умники. Данный способ «шаблонизации» действительно покрывает 95% нужд простых смертных. Если вам что-то не нравится — идите, побрейтесь бритвой Оккама.</p><p style="clear: both"><img decoding="async" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%200%200'%3E%3C/svg%3E" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" data-lazy-src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png"><noscript><img decoding="async" src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar"></noscript></p><p>Спасибо! Действительно коротко и ясно. Блин шарил интернет читал книжку принципы их понял а вот чтобы что-нить сделать. Спасибо автору за доступность!</p><p style="clear: both"><img decoding="async" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%200%200'%3E%3C/svg%3E" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" data-lazy-src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png"><noscript><img decoding="async" src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar"></noscript></p><p style="clear: both"><img decoding="async" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%200%200'%3E%3C/svg%3E" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" data-lazy-src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png"><noscript><img decoding="async" src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar"></noscript></p><p>А у меня так не работает</p><p><TITLE> <br />Зато работает так, как показано</p><p>*ПХП на сервере есть</p><p style="clear: both"><img decoding="async" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%200%200'%3E%3C/svg%3E" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" data-lazy-src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png"><noscript><img decoding="async" src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar"></noscript></p><p style="clear: both"><img decoding="async" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%200%200'%3E%3C/svg%3E" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" data-lazy-src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png"><noscript><img decoding="async" src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar"></noscript></p><p style="clear: both"><img decoding="async" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%200%200'%3E%3C/svg%3E" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" data-lazy-src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png"><noscript><img decoding="async" src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar"></noscript></p><p>в шаблоне вывод текста лучше делать так:</p><p style="clear: both"><img decoding="async" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%200%200'%3E%3C/svg%3E" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" data-lazy-src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png"><noscript><img decoding="async" src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar"></noscript></p><p>А что делать с кавычками в контенте?</p><p style="clear: both"><img decoding="async" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%200%200'%3E%3C/svg%3E" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" data-lazy-src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png"><noscript><img decoding="async" src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar"></noscript></p><p style="clear: both"><img decoding="async" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%200%200'%3E%3C/svg%3E" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" data-lazy-src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png"><noscript><img decoding="async" src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar"></noscript></p><p style="clear: both"><img decoding="async" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%200%200'%3E%3C/svg%3E" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" data-lazy-src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png"><noscript><img decoding="async" src="https://www.internet-technologies.ru/wp-content/uploads/wpdiscuz/defavatar.png" alt="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar" title="Template php что это. defavatar. Template php что это фото. Template php что это-defavatar. картинка Template php что это. картинка defavatar"></noscript></p><p><a href="http://www.internet-technologies.ru/articles/shablony-v-php-dlya-chaynikov.html" target="_blank" rel="noopener">Источник</a></p><h2>Шаблонизация в PHP</h2><p>Шаблонизация — это работа по интеграции готовой, статичной вёрстки на сайт. <br />Ведя работу над сайтом, написанном на PHP, мы разрабатываем логику, которая управляет представлением. <br />Логика — это PHP-сценарии, где происходит объявление переменных, функций, использование массивов и циклов, получение и обработка информации. <br />Представление — это внешний вид сайта. Сюда входят его страницы, которые содержат общие элементы оформления (шапка, меню, подвал) и контент (страницы, статьи и тому подобное).</p><p>Имея на руках готовую вёрстку, надо правильно её внедрить в работающий сайт, чтобы в определённых местах страниц информация выводилась динамически, под контролем PHP-сценариев.</p><h2>Что такое «шаблон» и причём тут рыба?</h2><p>Шаблон — это готовая вёрстка страницы или блока, которая состоит только из оформления, и не содержит никакого контента (полезной информации). <br />Шаблон по своей сути — это обычный PHP-сценарий, который на 90% состоит из HTML-кода и только на 10% из PHP-конструкций. Основная задача программиста в процессе работы над сайтом — это превратить статичные HTML-страницы в динамичные PHP-шаблоны, которые будут использоваться для показа итоговых страниц.</p><p>Но если статичная вёрстка страниц не содержит динамического контента, то что будет на его месте до начала внедрения этих страниц? Когда дизайнер или верстальщик хотят показать как будет выглядеть страница на сайте, то вместо реального контента используется так называемая «рыба». <br />Рыба — это заполнитель. Бессмысленный текст, который используется в вёрстке, чтобы показать как будет выглядеть страница, наполненная контентом.</p><h2>Проблемы типичного процесса вёрстки</h2><p>Когда верстальщик работает над несколькими страницами, ему приходится копировать бол́ьшую часть HTML-кода между страницами, так как эти страницы содержат много повторяющихся элементов: подключение стилей, шапка сайта с логотипов, футер сайта, различные меню и тому подобное. <br />В результате, когда дело доходит до правок, то при необходимости поменять что-нибудь в той же шапке, это изменение нужно будет сделать во всех HTML-файлах, чтобы они выглядели одинаково. Конечно, такой мартышкин труд никому не понравится.</p><h2>Общие фрагменты страниц сайта</h2><p>Взглянув на страницы практически любого сайта, можно заметить их сходство друг с другом. Ведь все страницы состоят из общих частей, которые не меняются, а также из областей с уникальным содержимым. И как было бы удобно редактировать общие блоки, вроде шапки сайта, отдельно, а затем вкладывать их во все страницы. Тогда при смене логотипа потребуется внести изменение только в одном месте, а все страницы сайта обновятся автоматически. <br />Шаблонизация — это и есть деление всей вёрстки на независимые шаблоны и дальнейшее их подключение и вкладывание друг в друга.</p><h3>Сбор страницы из частей</h3><p>Если поделить всю вёрстку сайта на отдельные, небольшие шаблоны мы получим сразу несколько преимуществ. Станет легче следить за единообразием интерфейса. Выделив представление сайта в шаблоны, мы также существенно упростим PHP-сценарии, ведь в них останется только PHP-код. Можно даже доверить верстальщику редактировать непосредственно шаблоны, так как в них почти нет программного кода, а тот, что есть, очень простой.</p><p>Потренируйтесь собирать страницы из фрагментов, выполнив это задание.</p><h2>Термины шаблонизации</h2><p>В разговоре о шаблонизации очень важно придерживаться определённых терминов, чтобы всегда было понимание, о чём идёт речь. Договоримся использовать следующую терминологию:</p><p><strong>Лейаут</strong> — это шаблон, который содержит HTML-код, общий для всех страниц сайта. В нём могут содержаться подключение стилей, мета-теги, шапка, подвал. Также лейаут содержит область для вставки уникального содержимого каждой страницы.</p><p><strong>Шаблон страницы</strong> — это шаблон с уникальным для одной страницы HTML-кодом. Например, для главной страницы там может быть список новостей. Также шаблон страницы может включать в себя <strong>блоки</strong>.</p><p><strong>Блок</strong> — это шаблон очень небольшого блока страницы. Например, это может быть один элемент списка новостей. Удобство блоков в том, один блок могут включать разные страницы.</p><h2>Содержимое шаблона</h2><p>Что же находится внутри шаблона? Вы уже знаете, что шаблон почти полностью состоит из HTML-кода. Но помимо HTML-тегов, там также лежат <strong>данные</strong> и <strong>простая логика</strong>.</p><h3>Данные в шаблоне</h3><p>Шаблон показывает динамическую информацию. Прилагательное «динамическая» означает, что эти данные могут меняться и показываться в зависимости от различных условий. Сама информация, как правило, хранится в базе данных, а PHP-сценарий извлекает её оттуда и передаёт в шаблон. <br />Вне зависимости от источника информации есть правило, которое никогда нельзя нарушать: любой шаблон (лейаут, шаблон страницы, блок) должен иметь доступ только к тем данным, которые ему явно передали. <br />Такую изоляцию данных обеспечивает специальная функция-шаблонизатор, о которой пойдёт речь далее.</p><h3>Логика шаблона</h3><p>В шаблоне должна находиться только несложная логика. Иными словами, шаблоны не содержат «тяжёлого» PHP-кода, а только простые конструкции. <br />Так, в шаблоне можно показывать переменные, использовать условия, циклы, обходить массивы, вызывать функции и подключать файлы. Всё другое запрещено. Оставшаяся бизнес-логика остаётся в PHP-сценариях, которые вызывают шаблоны и передают в них информацию.</p><h2>Функция-шаблонизатор</h2><p>Шаблонизатор — это функция, которая подключает файл шаблона, передаёт ему данные и возвращает сгенерированный HTML. <br />Именно шаблонизатор является тем клеем, что скрепляет воедино отдельные шаблоны в итоговую страницу. Работает он следующим образом: PHP-сценарий страницы выполяет все действия для подготовки необходимой информации, к примеру, запрашивает записи из базы данных. Эти записи в виде массива отправляются шаблонизатору вместе с именем шаблона страницы. <br />Шаблонизатор подключает указанный файл шаблона и передаёт туда всю информацию. Но, вместо вывода на экран содержимого этого шаблона, он захватывает получившийся HTML-код и возвращает его. <br />Затем сценарий вызывает шалбонизатор ещё раз, но теперь с его помощью подключает общий лейаут, куда отправляется общая информация, а также содержимое страницы, полученное из предыдущего шага. Весь результат работы выводится на экран.</p><h3>Пример использования</h3><p>Посмотрим на примере, как это всё работает. Начнём с того, что определим три шаблона: лейаут, шаблон страницы и какой нибудь блок. <br />Напоминаю, что в лейаут выносим общий HTML-код. <br />[layout.php]</p><p>Теперь очередь за шаблоном страницы: <br />[main.php]</p><p>Здесь обрати внимание, что шаблон страницы помимо интерации по массиву, для каждого его элемента вызывает функцию-шаблонизатор. Шаблонизатор получает контент из шаблона блока и показывает его внутри списка.</p><p><a href="http://htmlacademy.ru/tutorial/php/templates" target="_blank" rel="noopener">Источник</a></p><div class="fpm_end"></div></div></div></article></div><ul class="default-wp-page clearfix"><li class="previous"><a href="https://agro-sss.ru/how/frezernyy-stanok-biver-1325-kakoy-vybrat-postprotsessor-dlya-3d.html" rel="prev"><span class="meta-nav">←</span> фрезерный станок бивер 1325 какой выбрать постпроцессор для 3д</a></li><li class="next"><a href="https://agro-sss.ru/how/water-resist-5-atm-chto-eto.html" rel="next">Water resist 5 atm что это <span class="meta-nav">→</span></a></li></ul><div class="related-posts-wrapper"><h4 class="related-posts-main-title"> <i class="fa fa-thumbs-up"></i><span>Вам также понравится</span></h4><div class="related-posts clearfix"><div class="single-related-posts"><div class="article-content"><h3 class="entry-title"> <a href="https://agro-sss.ru/how/kak-kleit-nos-posle-rinoplastiki.html" rel="bookmark" title="Как клеить нос после ринопластики"> Как клеить нос после ринопластики </a></h3><div class="below-entry-meta"> <span class="posted-on"><a href="https://agro-sss.ru/how/kak-kleit-nos-posle-rinoplastiki.html" title="08:06" rel="bookmark"><i class="fa fa-calendar-o"></i> <time class="entry-date published" datetime="2023-10-03T08:06:47+00:00">03.10.2023</time><time class="updated" datetime="2022-07-12T07:24:05+00:00">12.07.2022</time></a></span> <span class="byline"> <span class="author vcard"> <i class="fa fa-user"></i> <a class="url fn n" href="https://agro-sss.ru/author/admin" title="admin" > admin </a> </span> </span> <span class="comments"> <i class="fa fa-comment"></i><a href="https://agro-sss.ru/how/kak-kleit-nos-posle-rinoplastiki.html#respond">0</a> </span></div></div></div><div class="single-related-posts"><div class="article-content"><h3 class="entry-title"> <a href="https://agro-sss.ru/how/u-kakih-znamenitostey-den-rozhdeniya-27-aprelya.html" rel="bookmark" title="у каких знаменитостей день рождения 27 апреля"> у каких знаменитостей день рождения 27 апреля </a></h3><div class="below-entry-meta"> <span class="posted-on"><a href="https://agro-sss.ru/how/u-kakih-znamenitostey-den-rozhdeniya-27-aprelya.html" title="14:21" rel="bookmark"><i class="fa fa-calendar-o"></i> <time class="entry-date published" datetime="2023-10-02T14:21:45+00:00">02.10.2023</time><time class="updated" datetime="2022-07-18T14:44:50+00:00">18.07.2022</time></a></span> <span class="byline"> <span class="author vcard"> <i class="fa fa-user"></i> <a class="url fn n" href="https://agro-sss.ru/author/admin" title="admin" > admin </a> </span> </span> <span class="comments"> <i class="fa fa-comment"></i><a href="https://agro-sss.ru/how/u-kakih-znamenitostey-den-rozhdeniya-27-aprelya.html#respond">0</a> </span></div></div></div><div class="single-related-posts"><div class="article-content"><h3 class="entry-title"> <a href="https://agro-sss.ru/how/switchport-trunk-encapsulation-dot1q-chto-eto.html" rel="bookmark" title="Switchport trunk encapsulation dot1q что это"> Switchport trunk encapsulation dot1q что это </a></h3><div class="below-entry-meta"> <span class="posted-on"><a href="https://agro-sss.ru/how/switchport-trunk-encapsulation-dot1q-chto-eto.html" title="11:46" rel="bookmark"><i class="fa fa-calendar-o"></i> <time class="entry-date published" datetime="2023-10-03T11:46:56+00:00">03.10.2023</time><time class="updated" datetime="2022-07-06T06:08:58+00:00">06.07.2022</time></a></span> <span class="byline"> <span class="author vcard"> <i class="fa fa-user"></i> <a class="url fn n" href="https://agro-sss.ru/author/admin" title="admin" > admin </a> </span> </span> <span class="comments"> <i class="fa fa-comment"></i><a href="https://agro-sss.ru/how/switchport-trunk-encapsulation-dot1q-chto-eto.html#respond">0</a> </span></div></div></div></div></div><div id="comments" class="comments-area"><div id="respond" class="comment-respond"><h3 id="reply-title" class="comment-reply-title">Добавить комментарий <small><a rel="nofollow" id="cancel-comment-reply-link" href="/how/template-php-chto-eto.html#respond" style="display:none;">Отменить ответ</a></small></h3><form action="https://agro-sss.ru/wp-comments-post.php" method="post" id="commentform" class="comment-form" novalidate><p class="comment-notes"><span id="email-notes">Ваш адрес email не будет опубликован.</span> <span class="required-field-message">Обязательные поля помечены <span class="required">*</span></span></p><p class="comment-form-comment"><label for="comment">Комментарий <span class="required">*</span></label><textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required></textarea></p><p class="comment-form-author"><label for="author">Имя <span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" autocomplete="name" required /></p><p class="comment-form-email"><label for="email">Email <span class="required">*</span></label> <input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-notes" autocomplete="email" required /></p><p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="Отправить комментарий" /> <input type='hidden' name='comment_post_ID' value='31496' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /></p></form></div></div></div><div id="secondary"><aside id="custom_html-7" class="widget_text widget widget_custom_html clearfix"><h3 class="widget-title"><span>Текущий курс криптовалют :</span></h3><div class="textwidget custom-html-widget"><div id="sidebar-block" style="width: 300px; height: 400px; padding: 10px; box-sizing: border-box; overflow-y: auto;"><div id="date-section" style="font-size: 18px; font-weight: bold; margin-bottom: 10px;"></div><div id="crypto-section" style="width: 100%;"></div></div></div></aside><aside id="search-3" class="widget widget_search clearfix"><h3 class="widget-title"><span>Найти на сайте</span></h3><form action="https://agro-sss.ru/" class="search-form searchform clearfix" method="get" role="search"><div class="search-wrap"> <input type="search" class="s field" name="s" value="" placeholder="Поиск" /> <button class="search-icon" type="submit"></button></div></form></aside><aside id="custom_html-8" class="widget_text widget widget_custom_html clearfix"><h3 class="widget-title"><span>Попробуй обыграть компьютер!</span></h3><div class="textwidget custom-html-widget"><div class="tic-tac-toe"><div class="status">Ваш ход</div><div class="board"><div class="cell" data-index="0"></div><div class="cell" data-index="1"></div><div class="cell" data-index="2"></div><div class="cell" data-index="3"></div><div class="cell" data-index="4"></div><div class="cell" data-index="5"></div><div class="cell" data-index="6"></div><div class="cell" data-index="7"></div><div class="cell" data-index="8"></div></div> <button class="reset">Играть снова</button></div></div></aside><aside id="recent-posts-3" class="widget widget_recent_entries clearfix"><h3 class="widget-title"><span>Новые записи</span></h3><ul><li> <a href="https://agro-sss.ru/popadancy/litres_arkan-kniga-3-krovnaya-mest.html">Скачать книгу Аркан. Книга 3. Кровная месть в формате FB2, TXT, PDF, EPUB бесплатно или читать книгу онлайн на сайте agro-sss.ru.</a></li><li> <a href="https://agro-sss.ru/popadancy/litres_kupets-iz-buduschego-chast-1.html">Скачать книгу Купец из будущего. Часть 1 в формате FB2, TXT, PDF, EPUB бесплатно или читать книгу онлайн на сайте agro-sss.ru.</a></li><li> <a href="https://agro-sss.ru/popadancy/litres_s-chistogo-lista-kniga-2-chekpoynt.html">Скачать книгу С чистого листа. Книга 2. Чекпойнт в формате FB2, TXT, PDF, EPUB бесплатно или читать книгу онлайн на сайте agro-sss.ru.</a></li><li> <a href="https://agro-sss.ru/popadancy/litres_rabynya-dlya-oborotney-ili-baykershi-ne-sdayutsya.html">Скачать книгу Рабыня для оборотней, или Байкерши не сдаются в формате FB2, TXT, PDF, EPUB бесплатно или читать книгу онлайн на сайте agro-sss.ru.</a></li><li> <a href="https://agro-sss.ru/popadancy/litres_pozyvnoy-kursant-kniga-tretya.html">Скачать книгу Позывной «Курсант». Книга третья в формате FB2, TXT, PDF, EPUB бесплатно или читать книгу онлайн на сайте agro-sss.ru.</a></li></ul></aside><aside id="recent-comments-3" class="widget widget_recent_comments clearfix"><h3 class="widget-title"><span>Комментарии пользователей</span></h3><ul id="recentcomments"><li class="recentcomments"><span class="comment-author-link">Hyi</span> к записи <a href="https://agro-sss.ru/how/kak-igrat-boksy-na-gitare.html#comment-3021">Как играть боксы на гитаре</a></li><li class="recentcomments"><span class="comment-author-link">Мария</span> к записи <a href="https://agro-sss.ru/how/stoyal-lyutyy-moroz-kakoe-slovo-oboznachaet-predmet.html#comment-3016">стоял лютый мороз какое слово обозначает предмет</a></li><li class="recentcomments"><span class="comment-author-link">Марина Валентиновна Мефодьева</span> к записи <a href="https://agro-sss.ru/how/umpg-publishing-chto-eto.html#comment-3003">Umpg publishing что это</a></li><li class="recentcomments"><span class="comment-author-link">Владимир</span> к записи <a href="https://agro-sss.ru/how/kak-ispravit-oshibku-v-avtoteke.html#comment-3002">Как исправить ошибку в автотеке</a></li><li class="recentcomments"><span class="comment-author-link">Мартин</span> к записи <a href="https://agro-sss.ru/how/tsefekon-svechi-dlya-detey-250-mg-vozrast-rebenka-na-kakoy.html#comment-2996">цефекон свечи для детей 250 мг возраст ребенка на какой</a></li></ul></aside><aside id="custom_html-3" class="widget_text widget widget_custom_html clearfix"><div class="textwidget custom-html-widget"><div class="saydbar-bor"></div></div></aside></div></div></div><div class="advertisement_above_footer"><div class="inner-wrap"><aside id="custom_html-4" class="widget_text widget widget_custom_html clearfix"><div class="textwidget custom-html-widget"><div class="menu-niz"></div></div></aside></div></div><footer id="colophon" class="clearfix "><div class="footer-widgets-wrapper"><div class="inner-wrap"><div class="footer-widgets-area clearfix"><div class="tg-footer-main-widget"><div class="tg-first-footer-widget"><aside id="custom_html-5" class="widget_text widget widget_custom_html clearfix"><div class="textwidget custom-html-widget"><div align="center"> <font color="white" size="+2"> Контакты для Роскомнадзора - informationforweb2023@gmail.com </font></div></div></aside></div></div><div class="tg-footer-other-widgets"><div class="tg-second-footer-widget"></div><div class="tg-third-footer-widget"></div><div class="tg-fourth-footer-widget"></div></div></div></div></div><div class="footer-socket-wrapper clearfix"><div class="inner-wrap"><div class="footer-socket-area"><div class="footer-socket-right-section"><div class="social-links"><ul><li><a href="/" target="_blank"><i class="fa fa-google-plus"></i></a></li><li><a href="/" target="_blank"><i class="fa fa-pinterest"></i></a></li><li><a href="/" target="_blank"><i class="fa fa-youtube"></i></a></li></ul></div></div><div class="footer-socket-left-section"><div class="copyright">Все права сохранены. © 2024 <a href="https://agro-sss.ru/" title="Портал agro-sss.ru" ><span>Портал agro-sss.ru</span></a> Внимание! Информация, опубликованная на сайте, носит исключительно ознакомительный характер и не является рекомендацией к применению. Материалы могут содержать информацию, предназначенную для пользователей старше 18 лет. 18+.</div></div></div></div></div></footer> <a href="#masthead" id="scroll-up"><i class="fa fa-chevron-up"></i></a></div> <script>document.addEventListener("copy",(event)=>{var pagelink="\nИсточник: https://agro-sss.ru/how/template-php-chto-eto.html";event.clipboardData.setData("text",document.getSelection()+pagelink);event.preventDefault();});</script><script type="text/javascript" id="expert-review-scripts-js-extra">var expert_review_ajax={"url":"https:\/\/agro-sss.ru\/wp-admin\/admin-ajax.php","nonce":"14ad565aa6","comment_to_scroll_selector":null,"ask_question_link_new_tab":null,"i18n":{"question_popup_name":"\u0418\u043c\u044f","question_popup_email":"Email","question_popup_phone":"\u0422\u0435\u043b\u0435\u0444\u043e\u043d","question_popup_question":"\u0412\u043e\u043f\u0440\u043e\u0441","question_popup_submit":"\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c","question_popup_cancel":"\u041e\u0442\u043c\u0435\u043d\u0430","question_submitted":"\u0412\u043e\u043f\u0440\u043e\u0441 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d","legacy_form":"\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043e\u0434 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u044b","field_cannot_be_empty":"\u041f\u043e\u043b\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c","field_must_be_checked":"\u041f\u043e\u043b\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043e","consent":"\u0421\u043e\u0433\u043b\u0430\u0441\u0438\u0435 \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445"},"consent":null};</script> <script>window.lazyLoadCallbackByFlat=function(r){var t,a;120<r.naturalWidth||(t="maxresdefault",(a=new Image).src=r.src.replace(t,"hqdefault"),a.onload=function(){var a;120<this.naturalWidth?r.src=this.src:((a=new Image).src=r.src.replace(t,"sddefault"),a.onload=function(){var a;120<this.naturalWidth?r.src=this.src:((a=new Image).src=r.src.replace(t,"mqdefault"),a.onload=function(){var a;120<this.naturalWidth?r.src=this.src:((a=new Image).src=r.src.replace(t,"default"),a.onload=function(){120<this.naturalWidth&&(r.src=this.src)})})})})};window.lazyLoadOptions={elements_selector:"img[data-lazy-src],.rocket-lazyload,iframe[data-lazy-src]",data_src:"lazy-src",data_srcset:"lazy-srcset",data_sizes:"lazy-sizes",class_loading:"lazyloading",class_loaded:"lazyloaded",threshold:300,callback_loaded:function(element){if(element.tagName==="IFRAME"&&element.dataset.rocketLazyload=="fitvidscompatible"){if(element.classList.contains("lazyloaded")){if(typeof window.jQuery!="undefined"){if(jQuery.fn.fitVids){jQuery(element).parent().fitVids();}}}}}};window.addEventListener('LazyLoad::Initialized',function(e){var lazyLoadInstance=e.detail.instance;if(window.MutationObserver){var observer=new MutationObserver(function(mutations){var image_count=0;var iframe_count=0;var rocketlazy_count=0;mutations.forEach(function(mutation){for(i=0;i<mutation.addedNodes.length;i++){if(typeof mutation.addedNodes[i].getElementsByTagName!=='function'){return;} if(typeof mutation.addedNodes[i].getElementsByClassName!=='function'){return;} images=mutation.addedNodes[i].getElementsByTagName('img');is_image=mutation.addedNodes[i].tagName=="IMG";iframes=mutation.addedNodes[i].getElementsByTagName('iframe');is_iframe=mutation.addedNodes[i].tagName=="IFRAME";rocket_lazy=mutation.addedNodes[i].getElementsByClassName('rocket-lazyload');image_count+=images.length;iframe_count+=iframes.length;rocketlazy_count+=rocket_lazy.length;if(is_image){image_count+=1;} if(is_iframe){iframe_count+=1;}}});if(image_count>0||iframe_count>0||rocketlazy_count>0){lazyLoadInstance.update();}});var b=document.getElementsByTagName("body")[0];var config={childList:true,subtree:true};observer.observe(b,config);}},false);</script><script data-no-minify="1" async src="https://agro-sss.ru/wp-content/plugins/rocket-lazy-load/assets/js/16.1/lazyload.min.js"></script><script>function lazyLoadThumb(e){var t='<img loading="lazy" onload="lazyLoadCallbackByFlat(this);" data-lazy-src="https://i.ytimg.com/vi/ID/maxresdefault.jpg" alt="" width="1280" height="720">',a='<div class="play"></div>';return t.replace("ID",e)+a}function lazyLoadYoutubeIframe(){var e=document.createElement("iframe"),t="ID?autoplay=1";t+=0===this.dataset.query.length?'':'&'+this.dataset.query;e.setAttribute("src",t.replace("ID",this.dataset.src)),e.setAttribute("frameborder","0"),e.setAttribute("allowfullscreen","1"),e.setAttribute("allow","accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"),this.parentNode.replaceChild(e,this)}document.addEventListener("DOMContentLoaded",function(){var e,t,a=document.getElementsByClassName("rll-youtube-player");for(t=0;t<a.length;t++)e=document.createElement("div"),e.setAttribute("data-id",a[t].dataset.id),e.setAttribute("data-query",a[t].dataset.query),e.setAttribute("data-src",a[t].dataset.src),e.innerHTML=lazyLoadThumb(a[t].dataset.id),e.onclick=lazyLoadYoutubeIframe,a[t].appendChild(e)});</script> <script>(function(){function flat_load(){setTimeout(function(){function appendbody(){var script=document.createElement('script');script.src="https://agro-sss.ru/wp-content/cache/autoptimize/js/autoptimize_7a66423a81899d91dd799f98ccfef9ae.js";document.getElementsByTagName('head')[0].appendChild(script);} function flat_load_script(){document.removeEventListener('mousemove',flat_load_script);document.removeEventListener('touchstart',flat_load_script);document.removeEventListener('scroll',flat_load_script);appendbody();} document.addEventListener('mousemove',flat_load_script,false);document.addEventListener('touchstart',flat_load_script,false);document.addEventListener('scroll',flat_load_script,false);},100);} window.addEventListener('load',flat_load,false);})()</script></body></html>