Dynamic Text Labels
Аналогично типу данных CalculatedValue(Вычисляемое значение), можно динамически генерировать текст layout на основе текущего объекта и контекста метки. Существует два способа определения динамического содержимого:
- указание кастомного класса-рендерера;
- использование Twig в шаблоне. Это является альтернативой статическому тексту, заданному в определении класса.
В обоих случаях вкладка Preview отображает предварительный просмотр сгенерированного содержимого. Если в тексте используется контекст объекта, перед проверкой результата во вкладке Preview просто перетащите нужный объект в поле Drag Object for Preview.
Кастомный класс-рендерер
Рассмотрим следующий пример.
Рассмотрим следующий пример.
Здесь мы хотим использовать кастомный сервис-рендерер, который реализует интерфейс DynamicTextLabelInterface и, в свою очередь, возвращает динамическую строку текста из метода renderLayoutText.
Также мы хотим передать в метод рендеринга некоторые дополнительные данные (в этом примере — some additional data :)).

Ниже приведен пример класса рендеринга.
<?php
namespace App\Helpers;
use Pimcore\Model\DataObject\Concrete;
class CustomRenderer implements DynamicTextLabelInterface
{
/**
* @param string $data as provided in the class definition
*/
public function renderLayoutText(string $data, ?Concrete $object, array $params): string
{
$text = '<h1 style="color: #F00;">Last reload: ' . date('c') . '</h1>' .
'<h2>Additional Data: ' . $data . '</h2>';
if ($object) {
$text .= '<h3>BTW, my fullpath is: ' . $object->getFullPath() . ' and my ID is ' . $object->getId() . '</h3>';
}
return $text;
}
}
В массиве $params находится дополнительная информация о текущем контексте.
Например: если текстовая метка находится внутри field collection, то в $params будет содержаться имя этой field collection (и, разумеется, имя самой метки).
Результат будет выглядеть следующим образом:

Twig и предпросмотр
Синтаксис Twig можно использовать внутри html-редактора (режим Source Edit) и в классе-рендерере. Также сгенерированный результат можно проверить во вкладке Preview.
В Twig-контексте доступны следующие переменные:
object- текущий объект данных;data- данные, переданные в рендерер и заданные в определении класса.
Ниже приведен пример использования Twig-кода в режиме редактирования исходного кода html-редактора:


Ограничения песочницы
Динамические текстовые рендеры используют Twig-шаблоны, управляемые пользователем, которые выполняются в sandbox-режиме с жесткими политиками безопасности для тегов, фильтров и функций. Чтобы разрешить использование большего количества возможностей при рендеринге шаблонов, необходимо задать следующую конфигурацию:
pimcore:
templating_engine:
twig:
sandbox_security_policy:
tags: ['if']
filters: ['upper']
functions: ['include', 'path']
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.