Перейти к основному содержимому

Dynamic Text Labels

Аналогично типу данных CalculatedValue(Вычисляемое значение), можно динамически генерировать текст layout на основе текущего объекта и контекста метки. Существует два способа определения динамического содержимого:

  • указание кастомного класса-рендерера;
  • использование Twig в шаблоне. Это является альтернативой статическому тексту, заданному в определении класса.

В обоих случаях вкладка Preview отображает предварительный просмотр сгенерированного содержимого. Если в тексте используется контекст объекта, перед проверкой результата во вкладке Preview просто перетащите нужный объект в поле Drag Object for Preview.

Кастомный класс-рендерер

Рассмотрим следующий пример.

Рассмотрим следующий пример.

Здесь мы хотим использовать кастомный сервис-рендерер, который реализует интерфейс DynamicTextLabelInterface и, в свою очередь, возвращает динамическую строку текста из метода renderLayoutText. Также мы хотим передать в метод рендеринга некоторые дополнительные данные (в этом примере — some additional data :)).

Class Definition

Ниже приведен пример класса рендеринга.

<?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']


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.