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

Добавление типов макетов для объектов

Примечание: Данная функция доступна начиная с версии v6.6.1.

С помощью плагинов (бандлов) можно добавлять собственные типы макетов для объектов Pimcore. Для этого необходимо выполнить следующие шаги:

  1. Создайте класс 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

  1. Добавьте тип макета в контекстное меню редактора определений классов Это делается с помощью событий пользовательского интерфейса (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')
    }
    }


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