Dokumentacja hooków API.

Learn DXPR BuilderExtendArchitectuur en API’s

Kreator DXPR ma pięć hooków. dxpr_builder.api.php dokumentuje wszystkie pięć, z przykładem każdego.

Hook Wywoływany z Skutek
hook_dxpr_builder_classes_alter(&$classes) DxprBuilderService::editorAttach() Dodaje klasy do listy HTML classes w edytorze
hook_dxpr_builder_icon_sets_alter(array &$icon_sets) DxprBuilderService::getIconSets() Dodaje, zmienia albo usuwa zestawy ikon w wybieraku ikon
hook_dxpr_builder_view_elements(array &$element) DxprBuilderFormatter::viewElements() Modyfikuje tablicę renderującą każdego pola pokazanego formaterem kreatora DXPR
hook_dxpr_builder_element_buttons_folders_alter(&$folders) DxprBuilderService::getButtonStyles() Brak widocznego skutku; zobacz poniżej
hook_dxpr_builder_elements_folders_alter(&$folders) DxprBuilderService::getDxprElementsFolders() Brak widocznego skutku; zobacz poniżej

hook_dxpr_builder_classes_alter

Dodaje wpisy do listy klas oferowanej przez pole HTML classes każdego elementu. Kod wywołuje go przez $this->moduleHandler->alter('dxpr_builder_classes', ...), więc nazwa funkcji kończy się na _alter; funkcja o nazwie mymodule_dxpr_builder_classes() nigdy nie jest wywoływana.

/**
 * 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 (tablica): klucz to jedna nazwa klasy albo kilka oddzielonych spacjami; wartość to etykieta. Klucz zaczynający się od optgroup- zaczyna grupę opcji.

Tablica zawiera już klasy każdego włączonego motywu ustawiającego dxpr_builder_classes w swoim .info.yml, więc motyw nie potrzebuje PHP. Zobacz klasy narzędziowe.

hook_dxpr_builder_icon_sets_alter

Uruchamia się po scaleniu przez moduł każdego pliku *.dxpr_icon_sets.yml włączonych modułów i motywów. Wybierz plik YAML; hooka użyj, gdy lista zależy od logiki runtime.

/**
 * 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',
    ],
  ];
}

Hook uruchamia się po rozwiązaniu względnych ścieżek css z plików YAML, więc zestaw dodany tutaj potrzebuje ścieżki od głównego katalogu Drupala, jak w przykładzie. Klucze zestawu ikon i 14 wbudowanych zestawów wymieniono na stronie własnych zestawów ikon.

hook_dxpr_builder_view_elements

Wywoływany przez invokeAll() na końcu DxprBuilderFormatter::viewElements(), po dołączeniu przez formater jego bibliotek, ustawień i profilu. $element to tablica renderująca pola, przekazana przez referencję. Działa dla każdego przeglądającego, redaktora czy nie.

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

Hooki bez widocznego skutku

  • hook_dxpr_builder_element_buttons_folders_alter() otrzymuje listę katalogów, których pliki .html opisują style przycisków. Wynik dociera do drupalSettings.dxprBuilder.buttonStyles. Element Button odczytuje zamiast tego własną stałą listę stylów Bootstrapa, więc dodatkowe katalogi nic nie zmieniają w edytorze.
  • hook_dxpr_builder_elements_folders_alter() zmodyfikowałby listę katalogów elements w motywach, ale nic nie wywołuje getDxprElementsFolders(), więc hook nigdy nie działa. Nie rejestruje elementów; aby dodać jeden, zobacz własne elementy.

Co dalej?