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

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

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


Как подключить такую функцию к проекту и как обращаться к результату функции из самого шаблона?
  • Вопрос задан
  • 8439 просмотров
Пригласить эксперта
Ответы на вопрос 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.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
25 апр. 2024, в 20:02
100000 руб./за проект
25 апр. 2024, в 19:42
49000 руб./за проект
25 апр. 2024, в 19:41
2000 руб./за проект