@ clestcruz, Preprocess - хороший вариант для этого.Но Вы также можете создать сервис для этого.
Создать пользовательский модуль с именем foo
.Создайте все необходимые файлы, а затем создайте foo.services.yml
.упоминание службы, например:
services:
foo.twig.TwigExtension:
class: Drupal\foo\XYZ
tags:
- {name: twig.extension}
создание файла службы в foo/src/XYZ.php
<?php
namespace Drupal\foo;
use Drupal\block\Entity\Block;
use Drupal\user\Entity\User;
use Drupal\node\Entity\Node;
use Drupal\taxonomy\Entity\Term;
use Drupal\paragraphs\Entity\Paragraph;
use Drupal\Core\Url;
/**
* Class DefaultService.
*
* @package Drupal\foo
*/
class XYZ extends \Twig_Extension {
/**
* {@inheritdoc}
* This function must return the name of the extension. It must be unique.
*/
public function getName() {
return 'product_listing_extend_display';
}
/**
* In this function we can declare the extension function.
*/
public function getFunctions() {
return array(
'getData' => new \Twig_Function_Method( $this, 'getData', array('is_safe' => array('html'))),
);
}
// Function to get tax childs by tid
function getData($id) {
// query for data
// return value
}
}
вызов метода {{getData ()}} в файле ветки.