Pull to refresh

Интеграция шаблонизатора Twig в CodeIgniter 2

Reading time2 min
Views9K
Логотип CodeIgniterЛоготип Twig
CodeIgniter — это небольшой и быстрый php фреймворк, с низким порогом вхождения. Хотя есть такие силачи как Yii, Symfony и Kohana, по непонятным причинам, все проекты пишу именно на нем. Всё бы хорошо, но есть у CI две довольно ощутимые проблемы: слабо развитый ActiveRecord и отсутствие шаблонизатора. Вторую проблему мы и решим.

Почему Twig, а не SMARTY?


Как по мне SMARTY — нечто большое, старое и страшное. С другой стороны — мощное и проверенное временем. Twig — молод, энергичен и вызывает доверие, так как встроен в Symfony, а у этого фреймворка довольно большое и активное сообщество. Хотя ещё вчера провели сравнение производительности в котором явно выиграл SMARTY, я решил попробовать Twig.

C общей информацией закончили, переходим к сути — три простых шага для интеграции Twig в CodeIgniter 2:

1. Переносим файлы Twig в CI


Забираем стабильную версию Twig с gitHub'а
github.com/fabpot/twig
Извлекаем содержимое архива и переименовываем папку в Twig, переносим её в папку application/libraries в вашем CI.

2. Связываем Twig с CI


Забираем стабильную версию одноименной библиотеки Twig для CI, которая даст нам возможность вызывать Twig из контроллера.
github.com/jamiepittock/codeigniter-twig
Из архива берем папку application и копируем поверх папки application в вашем CI.

3. Настраиваем пути Twig


Открываем application/config/twig.php и меняем пути в соответствии с вашими настройками. Например, мне понадобилось изменить путь к кэшу
$config['cache_dir'] = BASEPATH.'cache/twig';


4 (дополнительный). Включаем кэширование и автообновление шаблонов Twig'а


Открываем application/libraries/Twig.php из шага два.
Заменяем
$this->_twig = new Twig_Environment($loader

на
$twig_env_options = array(
    'auto_reload' => true,
    'cache' => $this->_cache_dir,
);
$this->_twig = new Twig_Environment($loader, $twig_env_options


Готово.

Подключение (лучше делать это в конструкторе контроллера, чтобы не дублировать код в каждой функции)
$this->load->library('twig');


Отображение шаблона очень похоже на встроенное в CI.
Встроенное
$this->load->view('forms/login_form', $data);

Twig'овское
echo $this->twig->render('forms/login_form.twig', $data);

$data — ассоциативный массив

Материалы по теме:
Документация Twig
Twig Environment Options
Интеграция Twig в Symfony 1.4
Пример готового шаблона
Tags:
Hubs:
0
Comments15

Articles