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

Добавление редактируемых элементов документа

При разработке бандлов вы можете добавлять индивидуальные редактируемые элементы (Editables) для документов.

Ранее единственным способом определить такие элементы было их создание в специальном пространстве имен Pimcore\Model\Document\Editable. Это по-прежнему допустимо, но теперь элементы могут находиться в любом пространстве имен, если они правильно зарегистрированы. Регистрация осуществляется через две записи конфигурации: список префиксов (пространств имен) для поиска и статическую карту соответствия имени элемента классу. Для достижения наилучшей производительности всегда следует использовать карту классов (class mapping), так как это избавляет систему от необходимости поиска имен классов.

Чтобы зарегистрировать новый редактируемый элемент, выполните три следующих шага:

1) Создайте класс элемента

Элемент должен наследоваться от Pimcore\Model\Document\Editable. Давайте создадим элемент Markdown (пространство имен может быть любым, но согласно правилам хорошего тона рекомендуется использовать подпространство Model\Document\Editable):

<?php  
// src/Model/Document/Editable/Markdown.php

namespace App\Model\Document\Editable;

class Markdown extends \Pimcore\Model\Document\Editable
{
// Реализуйте методы, требуемые Pimcore\Model\Document\Editable и интерфейсом Pimcore\Model\Document\Editable\EditableInterface
}

2) Зарегистрируйте элемент в карте (Editable Map)

Затем необходимо обновить конфигурацию pimcore.documents.editables.map. Это можно сделать в любом загружаемом конфигурационном файле (например, /config/config.yaml). Если вы поставляете этот элемент в составе бандла, укажите это в файле конфигурации, который загружается автоматически. Пример:

# /config/config.yaml  

pimcore:
documents:
editables:
map:
markdown: \App\Model\Document\Editable\Markdown

3) Создайте JavaScript для фронтенда

Для интерфейса редактирования необходимо добавить JavaScript-класс pimcore.document.editables.markdown. Он может наследоваться от любого существующего класса pimcore.document.editables.* и должен возвращать свой тип, переопределяя функцию getType(). Если вы наследуетесь от элементов других бандлов, убедитесь, что ваш бандл загружается после инициализации родительского элемента.

// /public/js/pimcore/document/editables/markdown.js  

pimcore.registerNS("pimcore.document.editables.markdown");
pimcore.document.editables.markdown = Class.create(pimcore.document.editables.textarea, {
getType: function () {
return "markdown";
}
});

Этот JS-файл должен быть подключен в режиме редактирования (editmode). Вы можете указать Pimcore сделать это, реализовав метод addJSFiles() в слушателе событий.

// src/EventListener/PimcoreAdminListener.php  

namespace App\EventListener;

use Pimcore\Event\BundleManager\PathsEvent;

class PimcoreAdminListener
{
public function addJSFiles(PathsEvent $event): void
{
$event->addPaths([
'/bundles/app/js/pimcore/document/editables/markdown.js',
]);
}
}


Регистрация слушателя событий в сервисах:

services:  
App\EventListener\PimcoreAdminListener:
tags:
- { name: kernel.event_listener, event: pimcore.bundle_manager.paths.editmode_js, method: addJSFiles }


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