Hooks-API-Referenz.

DXPR Builder lernenErweiternArchitektur und APIs

DXPR Builder hat fünf Hooks. dxpr_builder.api.php dokumentiert alle fünf, mit je einem Beispiel.

Hook Aufgerufen aus Wirkung
hook_dxpr_builder_classes_alter(&$classes) DxprBuilderService::editorAttach() Fügt Klassen zur Liste HTML classes im Editor hinzu
hook_dxpr_builder_icon_sets_alter(array &$icon_sets) DxprBuilderService::getIconSets() Fügt Icon-Sets in der Icon-Auswahl hinzu, ändert oder entfernt sie
hook_dxpr_builder_view_elements(array &$element) DxprBuilderFormatter::viewElements() Ändert das Render-Array jedes Felds, das mit dem DXPR-Builder-Formatierer gezeigt wird
hook_dxpr_builder_element_buttons_folders_alter(&$folders) DxprBuilderService::getButtonStyles() Keine sichtbare Wirkung; siehe unten
hook_dxpr_builder_elements_folders_alter(&$folders) DxprBuilderService::getDxprElementsFolders() Keine sichtbare Wirkung; siehe unten

hook_dxpr_builder_classes_alter

Fügt Einträge zur Klassenliste hinzu, die das Feld HTML classes jedes Elements bietet. Der Code ruft ihn über $this->moduleHandler->alter('dxpr_builder_classes', ...) auf, daher endet der Funktionsname auf _alter; eine Funktion namens mymodule_dxpr_builder_classes() wird nie aufgerufen.

/**
 * 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): Der Schlüssel ist ein Klassenname, oder mehrere per Leerzeichen getrennt; der Wert ist die Bezeichnung. Ein Schlüssel, der mit optgroup- beginnt, startet eine Optionsgruppe.

Das Array hält bereits die Klassen jedes aktivierten Themes, das dxpr_builder_classes in seiner .info.yml setzt, daher braucht ein Theme kein PHP. Siehe Dienstklassen.

hook_dxpr_builder_icon_sets_alter

Läuft, nachdem das Modul jede *.dxpr_icon_sets.yml-Datei der aktivierten Module und Themes gemergt hat. Bevorzugen Sie die YAML-Datei; nutzen Sie den Hook, wenn die Liste von Lauflogik abhängt.

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

Der Hook läuft, nachdem relative css-Pfade aus den YAML-Dateien aufgelöst wurden, daher braucht ein hier hinzugefügtes Set einen Pfad ab Drupal-Root, wie im Beispiel. Die Schlüssel eines Icon-Sets und die 14 eingebauten Sets stehen auf Eigene Icon-Sets.

hook_dxpr_builder_view_elements

Aufgerufen mit invokeAll() am Ende von DxprBuilderFormatter::viewElements(), nachdem der Formatierer seine Bibliotheken, Einstellungen und Profile angehängt hat. $element ist das Render-Array des Felds, per Referenz übergeben. Es läuft für alle Betrachtenden, ob mit oder ohne Bearbeitungszugang.

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

Hooks ohne sichtbare Wirkung

  • hook_dxpr_builder_element_buttons_folders_alter() erhält eine Liste von Ordnern, deren .html-Dateien Schaltflächenstile beschreiben. Das Ergebnis erreicht drupalSettings.dxprBuilder.buttonStyles. Das Button-Element liest stattdessen seine eigene feste Liste Bootstrap-Stile, daher ändern zusätzliche Ordner nichts im Editor.
  • hook_dxpr_builder_elements_folders_alter() würde eine Liste von elements-Ordnern in Themes ändern, aber nichts ruft getDxprElementsFolders() auf, daher läuft der Hook nie. Er registriert keine Elemente; um eines hinzuzufügen, siehe Eigene Elemente erstellen.

Wie geht es weiter?