Renderlet
Общее
Редактируемый элемент Renderlet - это специальный контейнер, который может обрабатывать каждый элемент в Pimcore (документы, ресурсы, объекты). Вы можете определить в вашем контроллере/действии, что делать с элементом, связанным с renderlet. Таким образом, возможно создание многофункциональной области в режиме редактирования, куда редактор может помещать любые элементы. Типичный случай использования - это рендеринг объектов продуктов внутри документа.
Конфигурация
| Имя | Тип | Описание | Обязательный |
|---|---|---|---|
controller | string | Укажите ссылку на контроллер, например App\Controller\FooController::myAction | X |
template | string | Укажите шаблон | |
className | string or string[] | Укажите имя класса (если выбран тип object) как одиночную строку или как массив строк | |
height | integer or string | Высота renderlet в пикселях или 'auto' | |
reload | bool | Перезагрузить документ при изменении | |
title | string | Добавить заголовок к блоку в режиме редактирования | |
type | string | Тип элемента, назначенного renderlet (document,asset,object) | |
width | integer | Ширина renderlet в пикселях | |
class | string | CSS-класс, который добавляется к внешнему контейнеру этого элемента в режиме редактирования |
Дополнительно вы можете передать любой параметр (со скалярным типом данных) в renderlet, который может быть доступен
в сконфигурированном контроллере через$request->query->get('yourKey').
Методы
| Имя | Возвращает | Описание |
|---|---|---|
isEmpty() | bool | Определяет, пуст ли редактируемый элемент |
В сконфигурированном экшене контроллера
В целевом экшене контроллера вы получаете следующие параметры, к которым можно получить доступ через $request->query->get('key')
| Имя | Тип | Описание |
|---|---|---|
id | integer | ID элемента, связанного с renderlet |
type | string | Тип элемента, связанного с renderlet (document,asset,object) |
subtype | string | Подтип элемента, связанного с renderlet (folder, image, link, page, classname, ...) |
Если вы определили какие-либо пользовательские параметры в конфигурации renderlet, вы также можете получить к ним доступ через $request->query->get('yourParam').
Пример
Ниже приведён код, демонстрирующий, как использовать renderlet для создания галереи.
Укажите редактируемый элемент Renderlet в шаблоне
<section id="renderlet-gallery">
{{
pimcore_renderlet("myGallery", {
"controller": "App\\Controller\\ContentController::myGalleryAction",
"title": "Drag an asset folder here to get a gallery",
"height": 400
})
}}
</section>
Теперь редакторы могут помещать элементы в renderlet в режиме редактирования.

Укажите экшн контроллера
#[Template('my-gallery.html.twig')]
public function myGalleryAction(Request $request): array
{
if ('asset' === $request->query->get('type')) {
$asset = Asset::getById($request->query->getInt('id'));
if ('folder' === $asset->getType()) {
return [
'assets' => $asset->getChildren()
];
}
}
return [];
}
Это действие отвечает за валидацию и передачу ресурсов в представление.
Конечно, чтобы ограничить доступ к renderlet, вы также можете использовать конфигурацию type.
Создайте представление
Теперь вам нужно создать файл шаблона по пути: templates/content/my_gallery.html.twig
{% if assets %}
<div class="my-gallery">
{% for asset in assets %}
{% if asset is instanceof('\\Pimcore\\Model\\Asset\\Image') %}
<div class="gallery-row">
{{ asset.getThumbnail("myThumbnailName").getHTML()|raw }}
</div>
{% endif %}
{% endfor %}
</div>
{% endif %}
И окончательное представление будет выглядеть как показано ниже:

Режим редактирования
Обратите внимание, что сам renderlet не осведомлён о режиме редактирования. Если вам нужно определить, в режиме редактирования это или нет, вы должны передать этот параметр в renderlet
{{
pimcore_renderlet("myRenderlet", {
....
"editmode": editmode
})
}}
Внутри renderlet вы можете получить доступ к параметру режима редактирования следующим образом:
{% if editmode %}
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.