что такое twig шаблонизатор
PHP шаблонизатор Twig. Введение
В данной статье я расскажу вам, что такое шаблонизатор Twig, и чем он может помочь веб-разработчику.
Любой, кто уже пытался разрабатывать свой сайт на основе методологии MVC, безусловно, встречался с задачей представления данных пользователю. И, если, с визуальным представлением все определено изначально, т.е. макет сайта уже есть и мы понимаем какие элементы и как будут размещены на странице, то с технической стороной этого вопроса не все так просто.
Известно, что PHP начинался как шаблонизатор, но в дальнейшем эволюция языка пошла в ином направлении. И, несмотря на то, что сегодня мы все еще можем использовать PHP в таком качестве, взгляните на пример кода ниже и сами определите, что выглядит проще:
Опытные программисты знают, что PHP многословный язык, и эта избыточность становится еще более очевидной, при формировании HTML контента. А современные системы шаблонизации, наоборот, пытаются уйти от излишней избыточности кода, при этом добавляя еще и свою функциональность поверх средств самого языка. Конечно же, вопросы безопасности и отладки также не обходятся стороной, и им уделяется пристальное внимание. Потому, то я и захотел вам рассказать об одном таком шаблонизаторе PHP – Twig.
Twig – PHP шаблонизатор, который компилирует шаблоны. Он позволяет сделать код шаблонов чище и понятнее, и таким образом сократить трудозатраты на обновление. Он расширяем, можно переопределить поведение почти всего движка, включая и ядро.
Устанавливается Twig двумя путями. Можно использовать или архив с исходным кодом, или использовать менеджер пакетов Composer. Но последний предпочтительнее.
composer require twig/twig
Обратите внимание на тот факт, что в качестве движка шаблонов Twig работает как на стороне фронтэнда так и на стороне бэкэнада проекта. В силу данной причины, мы можем рассматривать Twig в двух разных направлениях: Twig для разработчиков шаблонов и Twig, собственно, для разработчиков. С одной стороны все необходимые данные готовятся для дальнейшей обработки. С другой стороны полученные данные выводятся.
Таким образом, PHP шаблонизатор Twig будет крайне полезен разработчикам, так все современные фреймворки используют либо его, либо наработки, созданные по аналогии с ним для собственных нужд.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.
Что такое шаблонизатор Twig и зачем он нужен?
Зачем нужны шаблонизаторы?
Создание качественного продукта, будь то сайт или приложение — результат сплоченной работы целой команды. Это программисты, верстальщики, дизайнеры. Чем сложнее проект, тем важнее отделить его логику от представления. Только при успешном их разделении backend и frontend-разработчики смогут эффективно сотрудничать. Всего этого можно достигнуть благодаря шаблонизаторам.
На данный момент существует множество способов генерации конечных html-страниц. В том числе большое количество шаблонизаторов. Вот некоторые из них: Blade, Smarty, Twig, Volt. Мы остановимся подробнее на Twig.
История создания
Поколдовав над кодом и написав всю необходимую документацию, он пришел к выводу, что код вполне целостен и библиотеку можно показать публично. В своём личном блоге Фабьен отметил: «Twig не только один из самых функциональных шаблонизаторов, но и самый быстрый».
Особенности Twig
К основным особенностям шаблонизатора относятся:
высокая скорость работы
наследование шаблонов (возможность определить базовый и дочерние шаблоны)
понятный и компактный синтаксис
оптимизированный php код
безопасный режим «песочницы» (пользователи имеют ограниченный набор тегов, фильтров и методов объектов, определенных разработчиком )
возможность создания и использования макросов
полностью документирован (и API тоже)
простая отладка (при синтаксических ошибках шаблонизатор выведет сообщение об имени файла с ошибкой и номером строки)
Подключение Twig и рендер первого шаблона
Один из самых простых способов установки — скачать компонент с GitHub. Далее следует распаковать архив и каталог lib поместить в папку с рабочим проектом.
Всё необходимое для того, чтобы подключить Twig находится в файле index.php. В каталоге templates размещены файлы шаблонов. В нашем случае base.html и books.html. compilation_cache используется для хранения php-файлов, созданных шаблонизатором для работы.
2. Сообщаем шаблонизатору местонахождение шаблонов. В качестве аргумента передаем путь к папке templates.
3. Создаем объект шаблонизатора, указав необходимые опции cache и auto_reload.
Параметру cache передается путь к папке compilation_cache.
Вторую опцию активируем, прописав true. Это необходимо при обновлении страницы, чтобы Twig заново обработал шаблон. В противном случае шаблонизатор закеширует страницы. В будущем, после завершения работы над сайтом, данную опцию можно отключить.
4. Для наглядной работы с шаблонизатором сформируем небольшой массив со списком книг вида ключ-значение.
5. Используем метод render() для передачи данных в шаблон и вывода html результата.
Аргументы: название файла шаблона и созданный ранее массив.
6. Настройка base.html (базовый шаблон)
Наследование шаблонов позволяет вынести общие элементы сайта, такие как header, footer, sidebar в базовый шаблон. Он определяет костяк html-документа. Каждый блок, в свою очередь, может быть переопределен дочерним шаблоном.
В нашем примере два блока: title и content.
7. Настройка books.html (дочерний шаблон)
a) указываем родительский шаблон
б) вписываем название дочерней страницы в наш блок title. Оно появится между тегам title в base.html
в) заполняем содержание, оно будет помещено в блок content базового шаблона
Выстраивается следующая цепочка:
Twig подгружает шаблон books.html и формирует html-содержание
Распознает, что books.html это дочерний шаблон base.html и помещает туда сформированное содержание
Шаблонизатор возвращает полноценную страницу html
Оформление кода
Правило 2. Не ставить пробелов:
после открытия круглой скобки и перед закрытием круглой скобки в выражениях
перед и после разделителей строк
перед и после круглой скобки, используемой для фильтра и вызовов функций
перед и после открытия и закрытия массивов и хэшей
Правило 3. В названиях переменных использовать маленькие буквы и символы подчеркивания.
Правило 4. Делать отступы внутри тегов.
Циклы и условия в Twig
В Twig есть такие базовые конструкции как циклы и условия. В примере с выводом книг был задействован цикл for:
Одной из особенностей шаблонизатора является использование оператора двоеточие (..). Это альтернатива range в php для создания массива, содержащего диапазон элементов.
Пример перебора цифр:
То же самое можно проделать с буквами.
Кроме того, полезной является возможность добавить условие в определение цикла.
Условия, поддерживаемые Twig: if, elseif, if not и else:
Фильтры в Twig
Фильтры – более продвинутые средства Twig. Эти инструменты позволяют форматировать данные перед выводом, определять в каком формате и как будет передана информация в шаблон. Вот несколько из них:
Заключение
Twig – это мощное средство для создания шаблонов сайта, которое хорошо документировано и полностью протестировано. Он особенно полезен для командного ведения проекта, позволяя комфортно работать программистам и frontend-разработчикам.
Что такое twig шаблонизатор
Twig это современный шаблонизатор для PHP
Быстрый: Twig компилирует шаблоны в оптимизированный PHP код. Использование памяти по сравнению с обычным PHP кодом сведено к минимуму.
Безопасный: Twig имеет режим «песочницы» для оценки «ненадежного» кода в шаблонах. Это позволяет использовать Twig в приложениях, где пользователи могут менять содержимое шаблонов.
Гибкий: Twig использует гибко настраиваемые лексический и грамматический анализаторы. Это позволяет разработчику определять свои теги и фильтры, создавать собственный DSL.
Что делает Twig лучше PHP в качестве шаблонизатора?
Когда дело доходит до шаблонизаторов в PHP, многие люди скажут вам, что сам PHP является шаблонизатором. Но даже если PHP начал свою жизнь как язык шаблонов, он не развивался так, как в последние годы. На самом деле, он не поддерживает многие функции, которые должны иметь современные шаблонизаторы:
Twig имеет более лаконичный синтаксис, который позволяет легко читать шаблоны:
Конечно, для PHP написано большое число шаблонизаторов. Но большинство из них написаны под PHP и не используют лучшие практики разработки:
Юнит-тестирование: Twig полностью покрыт тестами. Библиотека стабильна и готова к использованию в больших проектах.
Документация: Twig полностью документирован, вся документация доступна на сайте, и, конечно, имеет полное описание API.
Безопасность: В отношении безопасности, Twig имеет несколько совершенно уникальных особенностей:
Чистые сообщения об ошибках: Каждый раз, когда у вас возникают синтаксические ошибки в шаблоне, Twig выводит сообщение о имени файла с ошибкой и номере строки, которая ее вызвала. Это очень упрощает отладку.
About
Документация по шаблонизатору Twig на русском языке
PHP и Twig: создание шаблонов веб страниц
Многие PHP фрэймворки, включая: Zend Frameworkd, Agavi, CackPHP и CodeIgniter, по-своему реализуют разделение бизнес логики и вывод данных. Однако, если вы не любите фрэймворки или ваш проект слишком мал для их использования, то вы можете воспользоваться какой-то отдельной системой построения шаблонов. К счастью, нам есть из чего выбирать. Smartym Savant, Dwoo. этот список можно продолжать и продолжать, однако в этой статье я покажу вам, как работать с шаблонизатором Twig.
Установка
Основы
Прежде чем приступить непосредственно к делу, давайте разберёмся с принципом работы шаблонизаторов. Обычное PHP приложение состоит из целого набора страниц, которые включают в себя как статический HTML код (меню, списки, изображения и т.д.), так и динамический контент (вывод данных из БД, xml файла, сервисы, …). С помощью Twig мы можем разделить данные процессы, создавая шаблоны со специальными маркерами, вместо которых в последствии будет вставляться динамический контент.
Значения для данных маркеров формируются в основном PHP скрипте; там же происходит общение с базой данных, xml парсинг и другие всевозможные операции. Таким образом, ваша страница будет строиться на основе 2х источников: шаблона с специальными вставками и PHP скриптов, где мы храним основной функционал. Это даёт возможность PHP разработчикам и дизайнерам одновременно работать над одними и теми же страницами.
Приступаем к делу
Для того чтобы посмотреть, как работает Twig, предлагаю рассмотреть простой пример:
Сохраните данный файл templates/thanks.tmpl. Обратите внимание на то, что все маркеры, представляющие собой переменные, помещены в двойные фигурные скобки. Подобная запись подскажет Twig-у, где и как осуществлять вставку данных.
Затем, нам необходимо создать основной скрипт, где будет происходить формирование переменных и данных:
В результате, если вы откроете данную страницу в браузере, то увидите следующее:
Для использования Twig-а, вам нужно пройти следующие шаги:
Условия
Twig также предоставляет нам возможность создавать условные выражения ‘if-else-endif’. Пример:
В зависимости от числа, которое генерируется в основном PHP скрипте, шаблон отобразит одно из двух сообщений. Вот и скрипт, где генерируется число от 0 до 30 и проверяется на чётность:
Также мы можем сделать многоуровневые проверки ‘if-elseif-else-endif’. Пример:
А вот и скрипт, где мы генерируем номер месяца и передаём его в шаблон:
Циклы
Twig также поддерживает цикл ‘for’. Он очень удобен, если нам необходимо пройтись по массиву. Пример:
В данном примере у нас простой не ассоциативный массив. На каждой итерации мы будем получать по одному элементу и выводить его в элементе списка. Вот и скрипт:
Для того чтобы пройтись по ассоциативному массиву, мы можем обращаться к ключам через “точку”. Пример:
Для того чтобы достучаться до значений массива в шаблоне, сначала пишем имя переменной, в которой хранится сам массив. Затем ставим точку и пишем название ключа, по которому достаём данные:
Такой же подход может быть применён для работы с объектами.
Дамп данных
Безусловно циклы вам пригодиться при выводе данных из БД. Пример:
В следующем фрагменте кода я использую PDO подключение к MySQL базе данных ‘world’. Если вы хотите попробовать данный пример, то вам нужно сформировать базу самим:
Тут стоит отметить несколько вещей:
Мы используем метод getchObject(), который вернёт нам строки из таблицы в виде объектов. Названия полей будут соответствовать названиям колонок. Затем эти объекты мы помещаем в массив и передаём его в шаблон. В шаблоне, используем цикл и выводим данные.
В данном примере также используется встроенный в Twig фильтр `escape`. По умолчанию данный фильтр пользуется функцией htmlspecialchars() для фильтровки данных. Это неплохая защита от XSS атак.
Подгрузка шаблонов
Все секции данной страницы находятся в отдельных файлах и подключаются сюда с помощью команды `include`. Давайте посмотрим, как выглядят подключаемые файлы:
А вот и главный PHP скрипт:
Обратите внимание, что нам не нужно загружать все шаблоны функцией loadTemplate. Главное подключить основной шаблон. Каждый мелкий под-шаблон загрузится автоматом. Переменные и значения, переданные в главный шаблон, будут доступны во всех подключаемых шаблонах.
Фильтрация данных
В данной статье мы уже затронули тему фильтров. Давайте посмотрим, какие ещё возможности в данной сфере предоставляет нам Twig.
Давайте рассмотрим, к примеру, фильтр ‘date’. Данный фильтр даёт нам возможность формировать дату и время, используя нативные для PHP маркеры. Пример:
Также вы можете воспользоваться фильтрами `upper`, `lower`, `capitalize`, `title` для контроля заглавных и прописных букв:
Фильтр `striptags` уберёт из текста все HTML и XML элементы:
Фильтр `replace` позволяет быстро и просто заменять какие-то значения в строке на нужные нам. Пример:
Если же вам нужно применить `escape` к большому блоку кода, то вы можете воспользоваться синтаксисом `autoescape`, передав булево значение true/false для активации и дезактивации фильтрации `escape`. Пример:
Теперь вы уже больше знаете о Twig-e и можете использовать условия, циклы и фильтры.
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://devzone.zend.com/1886/creating-web-page-templates-with-php-and-twig-part-1/
Перевел: Станислав Протасевич
Урок создан: 6 Марта 2013
Просмотров: 75849
Правила перепечатки
5 последних уроков рубрики «PHP»
Фильтрация данных с помощью zend-filter
Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.
Контекстное экранирование с помощью zend-escaper
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
Подключение Zend модулей к Expressive
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
Совет: отправка информации в Google Analytics через API
Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.
Шаблонизатор Twig
Легкий синтаксис и простые процессы делают его естественным для всех, кто знаком с Smarty, Django, Jinja, Liquid или Stencil.
Мы используем его для наших Грав-шаблонов отчасти из-за его гибкости и присущей безопасности. Тот факт, что это один из самых быстрых шаблонных движков для PHP, заставил выбрать его для использования в Grav без мозгов.
Twig компилирует шаблоны вплоть до обычного PHP. Это сокращает количество накладных расходов на PHP до минимума, что приводит к более быстрому и удобному обслуживанию пользователей.
Он также является очень гибким двигателем благодаря своему гибкому и парсельному. Это позволяет разработчику создавать собственные пользовательские теги и фильтры. Он также позволяет ему создать свой собственный специфический для домена язык (DSL).
Когда дело доходит до охраны, Твиг не срезает углы. Это дает разработчику режим песочницы, который позволяет исследовать любой недоверенный код. Это дает вам возможность использовать Twig в качестве языка шаблонов для приложений, в то же время давая пользователям возможность изменять дизайн шаблонов.
По сути, это мощный двигатель, который дает вам контроль над пользовательским интерфейсом. В сочетании с YAML для конфигурирования, это делает мощную и простую систему для работы с любым разработчиком или менеджером сайтов.
Как работает Twig?
Теги также являются важной частью файла шаблона, так как они контролируют логику самого шаблона.
Twig имеет два основных языковых ограничения:
Вот базовый шаблон, созданный с помощью Twig:
В этом примере мы устанавливаем заголовок сайта так же, как и для любой стандартной веб-страницы. Разница в том, что мы смогли использовать простой синтаксис Twig для представления имени автора и создания динамического списка типов элементов.
Шаблон сначала загружается, а затем передается через lexer, где его исходный код маркируется и разбивается на мелкие кусочки. В этот момент синтаксический анализатор принимает токены и превращает их в абстрактное синтаксическое дерево.
Как только это делается, компилятор превращает это в PHP-код, который затем может быть оценен и отображен пользователю.
Twig также может быть расширен для добавления дополнительных тегов, фильтров, тестов, операторов, глобальных переменных и функций. Более подробную информацию о расширении Twig можно найти в его официальной документации.
Синтаксис Twig
Шаблон Twig имеет несколько ключевых компонентов, которые помогают ему понять, что именно вы хотели бы сделать. К ним относятся теги, фильтры, функции и переменные.
Давайте более подробно рассмотрим эти важные инструменты и то, как они могут вам помочь создать невероятный шаблон.
Теги говорят Твигу, что ему нужно делать. Он позволяет вам установить, какой код Twig должен обрабатывать, а какой код он должен игнорировать во время оценки.
Существует несколько различных типов тегов, и каждый из них имеет свой собственный специфический синтаксис, который отличает их друг от друга.
Комментарии
Теги комментариев (`<#Insert Comment Here#>‘) используются для установки комментариев, которые существуют в файле шаблона Twig, но фактически не видны конечному пользователю. Они удаляются во время парсинга, не анализируются и не выводятся.
Хорошо использовать эти теги для объяснения того, что делает конкретная строка кода или команда, чтобы другой разработчик или дизайнер в вашей команде мог быстро прочитать и понять.
Вот пример тега комментария, который вы найдете в файле шаблона Twig:
Выходные теги
Выходные теги (‘<< Insert Output Here >>`) будут оценены и добавлены к сгенерированному выходу. Это место, где вы можете поместить все, что хотите, чтобы появиться на переднем конце, или в каком-то другом сгенерированном контенте.
Вот пример выходных тегов, используемых в шаблоне Twig:
Теги действий
Теги действий задают переменные, цикл через массивы и условия тестирования. Ваши for и if заявления сделаны с использованием этих меток.
Вот как может выглядеть тег действия в шаблоне Twig:
Очень важно, чтобы метки не перекрывали друг друга. Вы не можете поместить выходной тег внутри тега действия или наоборот.
Фильтры
Фильтры полезны, особенно когда вы используете выходные теги для отображения данных, которые могут быть отформатированы не так, как вы хотите.
Допустим, значение переменной name может включать нежелательные SGML/XML тэги. Вы можете отфильтровать их, используя код, приведенный ниже: