При написании проекта на Framework Kohana мне потребовалось подключить шаблонизатор Twig.
Для начала установим в Kohana модуль для работы с шаблонизатором - я использую этот модуль. Разворачиваем все это дело в кохану в директотрию modules. Twig разворачиваем в vendor - таким образом получется, что файлы шаблонизатора лежат по пути modules\twig\vendor\Twig\lib\Twig\.
В файле application/bootstrap.php для подключения модуля нужно добавить строчку:
Kohana::modules(array(
'twig' => MODPATH.'twig'.
))
Всё, можно использовать в контроллерах так:
$this->response->body( Twig::factory('template_file') );
Здесь template_file — файл шаблона, например main.twig, который ищется в application/views или views всех модулей. Где искать файлы шаблонов и расширение шаблонов указывается в настройках Twig (см. ниже).
Если же понадобится добавить свою функцию в Twig, то сделать это можно так:
В папке Extension создаем файл с нашим расширением, для примера добавим функцию unserialize(). Обратите внимание на имя класса - оно повторяет путь.
class Twig_Extension_Unserializer extends Twig_Extension {
//здесь мы и определяем нужную нам функцию
public function getFunctions() {
return array('unserializer' => new Twig_Function_Function('unserialize', array()));
}
//обязательно
public function getName() {
return 'unserializer';
}
}
Копируем файл modules\twig\config\twig.php в application\config\twig.php и настраиваем Twig:
return array
(
'environment' => array
(
'debug' => FALSE,
'trim_blocks' => FALSE,
'charset' => 'utf-8',
'base_template_class' => 'Twig_Template',
'cache' => APPPATH.'cache/twig',
'auto_reload' => TRUE,
'strict_variables' => FALSE,
'autoescape' => FALSE,
'optimizations' => -1,
),
//*************
'extensions' => array
(
// Добавляем нашу функцию unserializer
'Twig_Extension_Unserializer',
),
//*************
'templates' => APPPATH.'views',
'suffix' => 'twig',
'context_object' => TRUE,
);
Все готово, можно использовать. В шаблоне передается массив записей, поле записи content было сериализировано при записи в базу:
{% block main_content %}
{% for item in posts %}
{% set a = unserializer(item.content) %}
{% endfor %}
{% endblock %}
Но этом все.
Frameworks.su Шпаргалка вебмастера
Мне больше нравится как работает с twig-файлами Codelobster - http://www.codelobster.com/twig.html
Почему то не работает пишет при подключении в контроллере
$this->response->body( Twig::factory('template_file') );
пишет ошибку что не может найти класс Twig
Возможно вы забыли подключить его в bootstrap.php, либо вы его скопировали в другую папку.
Проверьте может у вас константа MODPATH не на тот каталог указывает
Зачем изобретать велосипед? https://github.com/WinterSilence/kohana-tpl
Сделал так, выдало ошибку :
ErrorException [ Fatal Error ]: Class 'Twig_Autoloader' not found
MODPATH\kohana-twig\classes\Kohana\Twig.php [ 35 ]
30 * @throws Kohana_Exception
31 * @return bool
32 */
33 public static function init()
34 {
35 Twig_Autoloader::register();
В чем может быть дело?