Добавление типов макетов для объектов
Примечание: Данная функция доступна начиная с версии v6.6.1.
С помощью плагинов (бандлов) можно добавлять собственные типы макетов для объектов Pimcore. Для этого необходимо выполнить следующие шаги:
- Создайте класс PHP для реализации на стороне сервера:
Этот класс должен расширять
Pimcore\Model\DataObject\ClassDefinition\Layout. Он определяет, какие настройки есть у вашего типа макета и как они считываются административным интерфейсом Pimcore.
Примеры можно найти в исходном коде базовых типов макетов Pimcore на GitHub. 2. Создайте JavaScript-класс для редактора определений классов: Этот JS-класс отвечает за опции конфигурации, которые отображаются в редакторе классов.
Он должен расширять pimcore.object.classes.layout.layout, находиться в пространстве имен pimcore.object.classes.layout и называться в соответствии
со свойством $fieldtype вашего PHP-класса.
Для примеров взгляните на типы макетов ядра Pimcore
на GitHub
3. Создайте класс JavaScript для редактора объектов:
Этот JS-класс определяет внешнее представление макета в самом редакторе объектов. Здесь можно использовать стандартные элементы ExtJS.
Он должен расширять pimcore.object.abstract, находиться в пространстве имен pimcore.object.layout и называться аналогично
свойству $fieldtype PHP-класса.
Для примеров взгляните на типы макетов ядра Pimcore
на GitHub
4. Зарегистрируйте тип макета в Pimcore, расширив конфигурацию pimcore.objects.class_definitions.data.layout.
Это можно сделать в любом загружаемом конфигурационном файле (например, config/config.yaml), но если вы создаете макет
в рамках бандла, используйте конфигурационный файл, который загружается автоматически.
Пример:
# config/config.yaml
pimcore:
objects:
class_definitions:
layout:
map:
myLayoutType: \App\Model\DataObject\ClassDefinition\Layout\MyLayoutType
Добавьте тип макета в контекстное меню редактора определений классов Это делается с помощью событий пользовательского интерфейса (UI events) на JavaScript.
Пример реализации:
document.addEventListener(pimcore.events.prepareClassLayoutContextMenu, (e) => {
if (e.detail.allowedTypes.root !== undefined) {
e.detail.allowedTypes.root.push('myLayoutType');
}
});Вы также можете добавить свой тип макета во все поддерживаемые на данный момент типы макетов, используя следующий фрагмент кода:
for (let layout in allowedTypes) {
if (allowedTypes[layout] !== undefined
&& allowedTypes[layout].length > 0
) {
allowedTypes[layout].push('myLayoutType')
}
}
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.