Довідник Hooks API.

Вивчення DXPR BuilderРозширенняАрхітектура та API

DXPR Builder має п’ять хуків. dxpr_builder.api.php документує всі п’ять, із прикладом кожного.

Хук Викликається з Ефект
hook_dxpr_builder_classes_alter(&$classes) DxprBuilderService::editorAttach() Додає класи до списку HTML classes у редакторі
hook_dxpr_builder_icon_sets_alter(array &$icon_sets) DxprBuilderService::getIconSets() Додає, змінює або вилучає набори піктограм у виборі піктограм
hook_dxpr_builder_view_elements(array &$element) DxprBuilderFormatter::viewElements() Змінює рендер-масив кожного поля, показаного з форматувальником DXPR Builder
hook_dxpr_builder_element_buttons_folders_alter(&$folders) DxprBuilderService::getButtonStyles() Без видимого ефекту; див. нижче
hook_dxpr_builder_elements_folders_alter(&$folders) DxprBuilderService::getDxprElementsFolders() Без видимого ефекту; див. нижче

hook_dxpr_builder_classes_alter

Додає записи до списку класів, який пропонує поле HTML classes кожного елемента. Код викликає його через $this->moduleHandler->alter('dxpr_builder_classes', ...), тож ім’я функції закінчується на _alter; функція з іменем mymodule_dxpr_builder_classes() ніколи не викликається.

/**
 * Implements hook_dxpr_builder_classes_alter().
 */
function mymodule_dxpr_builder_classes_alter(&$dxpr_builder_classes) {
  // Start a new option group.
  $dxpr_builder_classes['optgroup-brand'] = t('Brand styles');
  $dxpr_builder_classes['brand-primary-bg'] = t('Primary background');
  $dxpr_builder_classes['brand-accent-text'] = t('Accent text colour');
}
  • &$dxpr_builder_classes (array): ключ це одне ім’я класу, або кілька, розділених пробілами; значення це мітка. Ключ, що починається з optgroup-, починає групу параметрів.

Масив уже містить класи кожної ввімкненої теми, яка встановлює dxpr_builder_classes у своєму .info.yml, тож тема не потребує PHP. Див. Службові класи.

hook_dxpr_builder_icon_sets_alter

Запускається після того, як модуль об’єднав кожен файл *.dxpr_icon_sets.yml увімкнених модулів і тем. Надавайте перевагу файлу YAML; використовуйте хук, коли список залежить від логіки часу виконання.

/**
 * Implements hook_dxpr_builder_icon_sets_alter().
 */
function mymodule_dxpr_builder_icon_sets_alter(array &$icon_sets) {
  $module_path = \Drupal::service('extension.list.module')
    ->getPath('mymodule');
  $icon_sets['material'] = [
    'label' => t('Material Symbols'),
    'prefix' => 'material-symbols',
    'css' => $module_path . '/vendor/material-symbols.css',
    'library' => 'mymodule/material_symbols',
    'icons' => [
      'material-symbols material-symbols-star',
      'material-symbols material-symbols-home',
    ],
  ];
}

Хук запускається після того, як відносні шляхи css з файлів YAML розв’язано, тож набір, доданий тут, потребує шляху від кореня Drupal, як у прикладі. Ключі набору піктограм і 14 вбудованих наборів перелічено на сторінці Власні набори піктограм.

hook_dxpr_builder_view_elements

Викликається з invokeAll() наприкінці DxprBuilderFormatter::viewElements(), після того як форматувальник приєднав свої бібліотеки, налаштування та профіль. $element це рендер-масив поля, переданий за посиланням. Він запускається для кожного глядача, редактора чи ні.

/**
 * Implements hook_dxpr_builder_view_elements().
 */
function mymodule_dxpr_builder_view_elements(array &$element) {
  $element['#attached']['library'][] = 'mymodule/builder_extras';
}

Хуки без видимого ефекту

  • hook_dxpr_builder_element_buttons_folders_alter() отримує список тек, чиї файли .html описують стилі кнопок. Результат досягає drupalSettings.dxprBuilder.buttonStyles. Елемент Button читає власний фіксований список стилів Bootstrap натомість, тож додаткові теки нічого не змінюють у редакторі.
  • hook_dxpr_builder_elements_folders_alter() змінив би список тек elements у темах, але ніщо не викликає getDxprElementsFolders(), тож хук ніколи не запускається. Він не реєструє елементів; щоб додати один, див. Власні елементи.

Що далі?