xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Основные понятия в Plugin API

Опубликовано в

Как я уже писал — плагины это ООП замена 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.

Написанное актуально для Drupal 8
Похожие записи

Комментарии RSS

Что использовать и как вообще создать теперь плагин как в ctools-7.x content type был?
Задача реализовать блок с сущностью в контексте, который можно вставить через Page manager в панель.. собственно и контекст из page manager (панели).

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании