Задать вопрос

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

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

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


Как подключить такую функцию к проекту и как обращаться к результату функции из самого шаблона?
  • Вопрос задан
  • 8514 просмотров
Подписаться 3 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 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.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽