Как я уже писал — плагины это ООП замена info-хуков из предыдущих версий друпала. Самое время разобраться с основными понятиями:
Plugin
Класс, реализующий заранее определённый набор методов. Класс располагается по определённому адресу, содержит аннотацию и обычно расширяет PluginBase
. Примеры плагинов — форматтер полей типа Email, блок выбора языка, Views фильтр модуля Search.
Plugin definition
Информация о плагине (id, title и т.п.). Обычно хранится в аннотации к классу, но может генерироваться динамически. Структура зависит от типа плагина. Подробнее.
Plugin manager или Plugin type
Центральный класс, отвечающий за поиск плагинов определённого типа (plugin discovery) и создание их экземпляров (plugin instance). Обычно наследуется от DefaultPluginManager
или PluginManagerBase
. Все плагин-менеджеры являются сервисами. Примеры плагин-менеджеров — AggregatorPluginManager, TipPluginManager, CKEditorPluginManager. Подробнее.
Plugin discovery
Делится на два понятия:
1) Plugin discovery method — метод плагин-менеджера, отвечающий за поиск plugin definitions с помощью plugin discovery component. Обычно это DefaultPluginBase::getDefinitions()
.
2) Plugin discovery component — класс, отвечающий за поиск plugin definitions. Основной discovery component это конечно AnnotatedClassDiscovery
, получающий информацию из аннотаций. Так же есть — StaticDiscovery
, HookDiscovery
, YamlDiscovery
и другие.
Plugin factory
Делится на два понятия:
1) Plugin factory method — метод плагин-менеджера, создающий экземпляр плагина (plugin instance) с помощью plugin factory class. Обычно это DefaultPluginManager::createInstance()
.
2) Plugin factory class — класс, создающий экземпляр плагина (plugin instance). Обычно это DefaultFactory
или его производное, например ContainerFactory
.
Plugin instance
Настроенный экземпляр плагина. Создаётся плагин-менеджером с помощью plugin factory.
Plugin derivative
Класс, унаследованный от DerivativeBase
и возвращающий в методе DerivativeBase::getDerivativeDefinition()
список plugin definitions.
В Plugin API принято правило — один класс, один плагин. Т.е. например один класс с плагином блока может создать только один блок. Plugin derivatives позволяет реализовывать одним классом сколь угодно много плагинов (например блоков). Подробнее. Пример создания нескольких блоков с помощью одного плагина и plugin derivative.
Plugin mapper
Сам не понял, что это. Используется только в модуле Content translation.
- Как расширить функционал фильтр-плагина Views? (добавляем возможность фильтровать числовые поля по нескольким значениям)
- Использование Plugin API в своём модуле
- Как работает опция "Aggregation type" в настройках полей Views при включённой агрегации
- Создание сравнительной таблицы с значениями из EAV Field
- Препроцессинг настроек форматтера перед сохранением
Добавить комментарий