Drupal → Third Party Settings — интерфейс хранения дополнительных настроек конфигурационных сущностей и плагинов
В Drupal 8 появился унифицированный способ хранения дополнительных настроек в чужих config entities и plugins. Способ называется Third Party Settings.
О чём вообще речь? Например нужно добавить нодам новый функционал — возможность скрывать заголовок у определённого типа нод. В Drupal 7 мы бы альтернули форму редактирования типа материала, добавили чекбокс "Скрывать заголовок", навесили на форму свой #submit
и в нём бы сохранили значение этой опции с помощью variable_set()
. Некоторые модули для этого создавали отдельные таблицы в базе, другие хранили настройки в data атрибуте сущности, но единого способа хранения пользовательских опций не было.
В восьмёрке же все config entities и плагины расширяют ThirdPartySettingsInterface
, что делает доступным два основных метода — setThirdPartySetting()
и getThirdPartySetting()
, которые позволяют сохранять и получать значения дополнительных свойств.
Пример:
/** * Implements hook_form_FORM_ID_alter(): node_type_edit_form. */ function modulename_form_node_type_edit_form_alter(array &$form, FormStateInterface $form_state) { /** @var NodeTypeInterface $node_type */ $node_type = $form_state->getFormObject()->getEntity(); $form['hide_title'] = [ '#type' => 'checkbox', '#title' => t('Hide title'), '#default_value' => $node_type->getThirdPartySetting('modulename', 'hide_title'), ]; $form['#entity_builders'][] = 'modulename_node_type_edit_form_entity_builder'; } /** * Node type form entity builder callback. */ function modulename_node_type_edit_form_entity_builder($entity_type, NodeTypeInterface $node_type, &$form, FormStateInterface $form_state) { $node_type->setThirdPartySetting('modulename', 'hide_title', $form_state->getValue('hide_title')); }
Сохранённые таким способом данные будут корректно экспортироваться и импортироваться штатным менеджером конфигураций.
Комментарии
А ещё они корректно удаляются при удалении модуля, который их обслуживает
Оставить комментарий