Twig это простой и гибкий шаблонизатор, позволяющий разделить данные сайта и визуальное оформление. При этом предоставляются инструменты для вывода данных в шаблоне с использованием циклов, условного перехода, обращения к переменным и массивам.
Установка Twig
Установка twig выполняется через менеджер зависимостей composer для версии 1.0 (для php 5.2.7, версия 1.34 требует php 5.3.3)
composer require "twig/twig:~1.0"
или для версии 2.0 (требует php 7.0.0)
composer require "twig/twig:^2.0"
При невозможности использовать композер, загружаем с гита нужную версию:
https://github.com/twigphp/Twig/tags
Использование Twig
Сначала подключаем библиотеку, при использовании композера:
require_once '/path/to/vendor/autoload.php';
Если твиг установлен без композера, то нужно подключить собственный встроенный в твиг автозагрузчик классов:
require_once '/path/to/lib/Twig/Autoloader.php';
Twig_Autoloader::register();
Далее создаем объект loader. Ему передается шаблон, который может быть задан либо массивом:
$loader = new Twig_Loader_Array(array(
'index' => 'Hello {{ name }}!',
));
либо хранится в виде файла:
$loader = new Twig_Loader_Filesystem('/path/to/templates');
Объект loader используется при создании объекта Twig_Environment, которому также передается путь к шаблону.
$twig = new Twig_Environment($loader);
Для вывода шаблона используется функция render, которой передается имя шаблона и данные в виде массива, которые нужно отобразить:
echo $twig->render('index', array('name' => 'Fabien'));
Использование данных в шаблоне twig
Шаблоны представляют из себя обычный .html документ, в который вставляются специальные twig-тэги.
Переменные, переданные из функции render, доступны в двойных фигурных скобках, элементы массива доступны через точку ".".
<!DOCTYPE html>
<html>
<head>
<title>My Webpage</title>
</head>
<body>
<h1>My Webpage</h1>
{{ a_variable }}
{{ array_name.5 }}
{{ assoc_array.array_field_name }}
</body>
</html>
Очень полезно использование циклов при переборе элементов масссивов:
<!DOCTYPE html>
<html>
<head>
<title>My Webpage</title>
</head>
<body>
<ul id="navigation">
{% for item in navigation %}
<li><a href="/{{ item.href }}">{{ item.caption }}</a></li>
{% endfor %}
</ul>
</body>
</html>
Используется также оператор условного перехода if
{% if online == false %}
<p>Our website is in maintenance mode. Please, come back later.</p>
{% endif %}
Внутри шаблона можно добавлять другие шаблоны
{{ include('sidebar.html') }}