Hooks API.

Learn DXPR BuilderExtendArchitectuur en API’s

DXPR Builder heeft vijf hooks. dxpr_builder.api.php documenteert ze alle vijf, met een voorbeeld van elk.

Hook Aangeroepen vanuit Effect
hook_dxpr_builder_classes_alter(&$classes) DxprBuilderService::editorAttach() Voegt klassen toe aan de lijst HTML classes in de editor
hook_dxpr_builder_icon_sets_alter(array &$icon_sets) DxprBuilderService::getIconSets() Voegt pictogrammensets toe aan de pictogramkiezer, wijzigt of verwijdert ze
hook_dxpr_builder_view_elements(array &$element) DxprBuilderFormatter::viewElements() Wijzigt de render array van elk veld getoond met de DXPR Builder-formatter
hook_dxpr_builder_element_buttons_folders_alter(&$folders) DxprBuilderService::getButtonStyles() Geen zichtbaar effect; zie hieronder
hook_dxpr_builder_elements_folders_alter(&$folders) DxprBuilderService::getDxprElementsFolders() Geen zichtbaar effect; zie hieronder

hook_dxpr_builder_classes_alter

Voegt vermeldingen toe aan de klassenlijst die het veld HTML classes van elk element biedt. De code roept hem aan via $this->moduleHandler->alter('dxpr_builder_classes', ...), dus de functienaam eindigt op _alter; een functie genaamd mymodule_dxpr_builder_classes() wordt nooit aangeroepen.

/**
 * 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): de sleutel is één klassenaam, of meerdere gescheiden door spaties; de waarde is het label. Een sleutel die begint met optgroup- start een optiegroep.

De array bevat al de klassen van elk ingeschakeld thema dat dxpr_builder_classes in zijn .info.yml zet, dus een thema heeft geen PHP nodig. Zie Utility-klassen.

hook_dxpr_builder_icon_sets_alter

Draait nadat de module elk *.dxpr_icon_sets.yml-bestand van de ingeschakelde modules en thema's heeft samengevoegd. Geef de voorkeur aan het YAML-bestand; gebruik de hook wanneer de lijst van runtimelogica afhangt.

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

De hook draait nadat relatieve css-paden uit de YAML-bestanden zijn opgelost, dus een set die hier wordt toegevoegd heeft een pad vanaf de Drupal-root nodig, zoals in het voorbeeld. De sleutels van een pictogrammenset en de 14 meegeleverde sets staan op Aangepaste pictogrammensets.

hook_dxpr_builder_view_elements

Aangeroepen met invokeAll() aan het eind van DxprBuilderFormatter::viewElements(), nadat de formatter zijn libraries, instellingen en profiel heeft gekoppeld. $element is de render array van het veld, by reference doorgegeven. Hij draait voor elke kijker, redacteur of niet.

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

Hooks zonder zichtbaar effect

  • hook_dxpr_builder_element_buttons_folders_alter() ontvangt een lijst met mappen waarvan de .html-bestanden knopstijlen beschrijven. Het resultaat komt in drupalSettings.dxprBuilder.buttonStyles. Het Knop-element leest zijn eigen vaste lijst met Bootstrap-stijlen, dus extra mappen wijzigen niets in de editor.
  • hook_dxpr_builder_elements_folders_alter() zou een lijst met elements-mappen in thema's wijzigen, maar niets roept getDxprElementsFolders() aan, dus de hook draait nooit. Hij registreert geen elementen; om er een toe te voegen, zie Aangepaste elementen.

Wat nu?