Как добавить user функции в Twig?

Решил попробовать Twig для нового проекта. Не разберусь как добавить собственные функции.
К примеру необходимо вставить в шаблон выбранные по id статьи из таблицы.

Пример функции:
function get_article($id) {
     //делаем выборку из БД и записываем в result
     return $result;
}


Как подключить такую функцию к проекту и как обращаться к результату функции из самого шаблона?
  • Вопрос задан
  • 8485 просмотров
Пригласить эксперта
Ответы на вопрос 4
NeX
@NeX
twig.sensiolabs.org/doc/advanced.html

<?php defined('SYSPATH') or die('No direct script access.');

class My_Twig_Extension extends Twig_Extension {
	public function getName()
	{
		return 'my_twig';
	}
	
	public function getFilters()
	{
		return array();
	}
	
	public function getFunctions()
	{
		return array(
			'get_article' => new Twig_Function_Method($this, 'get_article',
				array('is_safe' => array('html'))),
		);
	}
	
	function get_article($id) {
		 //делаем выборку из БД и записываем в result
		 return $result;
	}
	
	public function getTests()
	{
		return array();
	}
}


В конфиге твига:

<?php defined('SYSPATH') or die('No direct script access.');

return array(
	'default'    => array(
		'extensions' => array(
			'My_Twig_Extension',
		),
	),
);
Ответ написан
Комментировать
EnChikiben
@EnChikiben
Создаете класс на основе класса Twig_Extension, в нем описываете свою функцию и добавляете ее в перекрытый метод getFunctions() (имя функции которые будет вызываться в твиге), потом при создании объекта твига добавляете в него экземпляр своего класса
$Twig->addExtension(new MyTwigExtension());
Почитать можно тут: twig.sensiolabs.org/doc/advanced.html
Ответ написан
Комментировать
У себя использую такой вариант:

// Регистрация функции
$twig->addFunction('pluginIsActive',	new Twig_Function_Function('getPluginStatusActive'));

// Сама функция
function getPluginStatusActive($pluginID){
...
}
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Вообще такие вещи обычно делаются через HMVC.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы