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') }}