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

Renderlet

Общее

Редактируемый элемент Renderlet - это специальный контейнер, который может обрабатывать каждый элемент в Pimcore (документы, ресурсы, объекты). Вы можете определить в вашем контроллере/действии, что делать с элементом, связанным с renderlet. Таким образом, возможно создание многофункциональной области в режиме редактирования, куда редактор может помещать любые элементы. Типичный случай использования - это рендеринг объектов продуктов внутри документа.

Конфигурация

ИмяТипОписаниеОбязательный
controllerstringУкажите ссылку на контроллер, например App\Controller\FooController::myActionX
templatestringУкажите шаблон
classNamestring or string[]Укажите имя класса (если выбран тип object) как одиночную строку или как массив строк
heightinteger or stringВысота renderlet в пикселях или 'auto'
reloadboolПерезагрузить документ при изменении
titlestringДобавить заголовок к блоку в режиме редактирования
typestringТип элемента, назначенного renderlet (document,asset,object)
widthintegerШирина renderlet в пикселях
classstringCSS-класс, который добавляется к внешнему контейнеру этого элемента в режиме редактирования

Дополнительно вы можете передать любой параметр (со скалярным типом данных) в renderlet, который может быть доступен в сконфигурированном контроллере через$request->query->get('yourKey').

Методы

ИмяВозвращаетОписание
isEmpty()boolОпределяет, пуст ли редактируемый элемент

В сконфигурированном экшене контроллера

В целевом экшене контроллера вы получаете следующие параметры, к которым можно получить доступ через $request->query->get('key')

ИмяТипОписание
idintegerID элемента, связанного с renderlet
typestringТип элемента, связанного с renderlet (document,asset,object)
subtypestringПодтип элемента, связанного с 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 в режиме редактирования.

Renderlet gallery - editmode

Укажите экшн контроллера

#[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 %}

И окончательное представление будет выглядеть как показано ниже: Rendered renderlet - frontend

Режим редактирования

Обратите внимание, что сам renderlet не осведомлён о режиме редактирования. Если вам нужно определить, в режиме редактирования это или нет, вы должны передать этот параметр в renderlet

{{  
pimcore_renderlet("myRenderlet", {
....
"editmode": editmode
})
}}

Внутри renderlet вы можете получить доступ к параметру режима редактирования следующим образом:

{% if editmode %}  


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