При написании проекта на 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:
Мне больше нравится как работает с 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();
В чем может быть дело?