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

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(&$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'));
}

Сохранённые таким способом данные будут корректно экспортироваться и импортироваться штатным менеджером конфигураций.

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

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

А ещё они корректно удаляются при удалении модуля, который их обслуживает

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

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

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