преобразовать php в 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
Просмотров: 75451
Правила перепечатки
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 сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.
Преобразовать php в twig
Этот документ описывает синтаксис и семантику шаблона и будет наиболее полезен для тех, кто создает шаблоны TWIG.
Краткий обзор
Шаблон содержит переменные или выражения, которые будут заменяться значениями, когда шаблон вычисляется, и теги, которые контролируют логику шаблона.
Ниже приводится минимальный шаблон, который иллюстрирует основы. Мы рассмотрим детали позже:
Интеграция со средами разработки.
Многие среды разработки поддерживают подсветку синтаксиса и автодополнение для TWIG.
Переменные
Приложение передает переменные, с которыми вы можете работать в шаблоне. Переменные могут иметь атрибуты или элементы, к которым вы можете иметь доступ. Как выглядит переменная определяется приложением, которое ее предоставило. Вы можете использовать точку (.) чтобы получить доступ к атрибутам переменной (методы или свойства PHP-объекта или элементы PHP- массива), или так называемый индекс ([]):
Важно знать,что фигурные скобки не являются переменной, а печатают предложение.
Если вы хотите получить доступ к переменным внутри тегов, не ставьте скобки.
Реализация
Для удобства foo.bar делает следующие вещи на уровне PHP:
С другой стороны, foo[‘bar’] работает только с массивами PHP:
Если вы хотите получить динамический атрибут для переменной, используйте функцию attribute вместо этого.
Глобальные переменные
Следующие переменные всегда доступны в шаблонах:
Присвоение переменных
Вы можете придать значения переменных внутри блоков кода. Присвоения используют тег set :
Фильтры
Переменные могут быть изменены с помощью фильтров filters. Фильтры отделяются от переменных с помощью pipe-символа (|) и могут иметь дополнительные аргументы в скобках. Можно объединять несколько фильтров. Выход одного фильтра направляется в следующий.
Следующий пример удаляет все HTML-теги и title из name:
Фильтры, которые принимают аргументы,имеют круглые скобки вокруг аргументов. Этот пример присоединит список, разделенный запятой.
Чтобы применить фильтр для секции в коде, оберните его с тегом filter:
Чтобы узнать больше о встроенных фильтрах зайдите на страницу filters.
Функции
Можно вызывать функции чтобы генерировать контент. Функции могут быть вызваны по имени со скобками после него и могут иметь аргументы.
Например, функция range возвращает список, содержащий арифметическую прогрессию целых чисел:
Чтобы узнать больше о встроенных функциях зайдите на страницу functions.
Именованные аргументы
Использование именованных аргументов помогает понять значение переменных, которые вы передаете как аргументы.
Именованные аргументы также позволяют пропустить некоторые аргументы, для которых вы не хотите изменять значение по умолчанию:
Вы также можете использовать позиционные и именованные аргументы в одном вызове, и в этом случае позиционные аргументы должны идти впереди именованных аргументов.
Каждая страница документации по функциям и фильтрам имеет раздел, где имена всех аргументов выписаны, если они поддерживаются.
Управляющая структура
Тег if можно использовать чтобы проверить выражение:
Чтобы узнать больше о встроенных тегах зайдите на страницу tags.
Комментарии
Включение других шаблонов
Тэг include используется для включения шаблона и включению использованного контента к текущему:
По умолчанию включенные шаблоны передаются в текущий контекст.
Контекст, который передается во включенный шаблон включает переменные, определенные в шаблоне:
Включенный шаблон render_box.html может получить доступ к box.
Имя файла шаблона зависит от загрузчика шаблона. Например, Twig_Loader_Filesystem позволяет получить доступ к другим шаблонам по имени. Вы можете включить шаблоны в ниже лежащих директориях используя знак слэша:
Это поведение зависит от приложения, в которое встраивается Twig.
Наследование шаблонов
Наиболее мощное средство Twig это наследование шаблонов. Оно позволяет вам построить базовый «скелет» шаблона,который содержит все общие элементы вашего сайта и определяет блоки, которые дочерние шаблоны могут замещать.
Звучит сложно, но на самом деле все очень просто. Это легко понять с помощью следующего примера.
Давайте определим базовый шаблон, base.html, который определяет простой HTML скелетный документ, который вы можете использовать для простой страницы с двумя колонками:
Шаблон-потомок может выглядеть так:
Возможно передать содержание родительского шаблона используя функцию parent.
Это дает результаты родительского блока:
Twig также поддерживает множественное наследование с так называемым горизонтальным повторным использованием с помощью тега use. Эта сложная особенность вряд ли понадобится в обычных шаблонах.
Экранирование HTML
Twig поддерживает оба, автоматическое сохранение включено по умолчанию.
Автоматическое сохранение поддерживается только если расширение escaper включено (что так и есть по умолчанию).
Работа с экранированием вручную
Если сохранение вручную включено, это ваша обязанность сохранить все переменные если это нужно. Что нужно сохранить? Все переменные, которым вы не доверяете.
По умолчанию, фильтр escape использует html метод, но в зависимости от сохраняемого контекста, вы возможно захотите использовать другие методы:
Автоматическое экранирование
Вне зависимости от того, включено ли автоматическое сохранение или нет, вы можете выделить секцию шаблона, которую нужно или не нужно сохранить, используя тег autoescape:
По умолчанию, авто-сохранение сохраняет html. Если выводить переменные в других контекстах, нужно явно сохранить их, используя подходящий метод:
Экранирование
Иногда желательно или даже необходимо заставить Twig игнорировать те части, которые в противном случае он воспримет как переменные или как блоки.
Самым простым способом для вывода переменной разделитель << является использование выражения:
Макросы
поддержка значений аргументов была добавлена по умолчанию в Twig 1.12.
Макрос может быть определен в любом шаблоне, и должен быть «импортирован» через тег import до использования:
Кроме того, вы можете импортировать отдельные имена макросов из шаблона в текущее пространство имен с помощью тега from или дать им имя:
По умолчанию значение также может быть определено для макро аргументов прямо в вызове макроса:
Выражения
Twig позволяет выражения везде. Такая работа очень похожа на обычный PHP и даже если вы не работаете с PHP, вы почувствуете себя с ним комфортно.
Литеры
Самой простой формой выражений являются литералы. Литералы представлены для таких типов PHP, как строки, числа и массивы. Существуют следующие литералы:
Массивы и хэши могут быть вложенными:
Использование двойных кавычек или одиночных кавычек не имеет никакого ьвлияния на производительность, но строки интерполяции поддерживается только для строк в двойных кавычках.
Вычисления
Twig позволяет оперировать значениями. Это редко используется в шаблонах, но существует ради полноты. Поддерживаются следующие операторы:
Логика
Вы можете объединить несколько выражений со следующими операторами:
Twig также поддерживает побитовые операторы (b-and, b-xor, and b-or).
Сравнения
Вы также можете проверить, если строка начинается или заканчивается другой строкой:
Для сложных сравнений строк, оператор matches позволяет вам использовать регулярные вырожения:
Оператор in
Оператор in осуществляет проверку содержания.
Он возвращает true если левый операнд содержится в правом:
Вы можете использовать этот фильтр, чтобы выполнить проверку на содержание со строками, массивами или объектами, осуществляющих Traversable интерфейс.
Чтобы выполнить проверку на то, что левый операнд не содержится в правом, нужно использовать not in оператор.
Операторы проверки
Оператор is выполняет тесты. Тесты могут быть использованы для тестирования переменной в отношении общего выражения. Правый операнд является именем теста:
Тесты также используют аргументы:
Тесты могут быть инвертированы при использовании is not оператора:
Перейдите на страницу tests чтобы узнать больше о встроенных тестах.
Другие операторы
Поддержка расширенного тройного оператора была добавлена в Twig 1.12.0.
Следующие операторы очень полезны, но не вписываются ни в какую из категорий:
Строка интерполяции
Строка интерполяции была добавлена в Twig 1.5.
Строка интерполяция (#
Управление пробелами
Первая новая строка после тега шаблона удаляется автоматически (как в PHP). Пробелы больше не изменяются механизмом шаблонов, поэтому каждый пробел (пробелы, табуляции, новые строки и т.д.) возвращается без изменений.
Вы также можете контролировать пробелы на уровне тегов. Используя модификаторы управления пробелами в ваших тегах, вы можете обрезать начальные и / или конечные пробелы.
Twig поддерживает два модификатора:
: Удаляет все пробелы (за исключением новых строк). Использование этого модификатора справа отключает удаление по умолчанию первой новой строки, унаследованной от PHP.
Метка apply была введена в Twig 2.9; используйте тег filter с предыдущими версиями.
Расширения
Twig может быть легко расширен.
Если вы ищете новые теги, фильтры или функции, посмотрите это в официальном хранилище расширений Twig extension repository.
Если вы хотите создать свой собственный, прочтите главу Creating an Extension.
Что такое шаблонизатор 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-разработчикам.