Référence de l’API des hooks.

Apprendre DXPR BuilderÉtendreArchitecture et API

DXPR Builder a cinq hooks. dxpr_builder.api.php documente les cinq, avec un exemple de chacun.

Hook Appelé depuis Effet
hook_dxpr_builder_classes_alter(&$classes) DxprBuilderService::editorAttach() Ajoute des classes à la liste HTML classes dans l’éditeur
hook_dxpr_builder_icon_sets_alter(array &$icon_sets) DxprBuilderService::getIconSets() Ajoute, change ou retire des jeux d’icônes dans le sélecteur d’icônes
hook_dxpr_builder_view_elements(array &$element) DxprBuilderFormatter::viewElements() Modifie le tableau de rendu de chaque champ affiché avec le formateur DXPR Builder
hook_dxpr_builder_element_buttons_folders_alter(&$folders) DxprBuilderService::getButtonStyles() Aucun effet visible ; voir ci-dessous
hook_dxpr_builder_elements_folders_alter(&$folders) DxprBuilderService::getDxprElementsFolders() Aucun effet visible ; voir ci-dessous

hook_dxpr_builder_classes_alter

Ajoute des entrées à la liste de classes offerte par le champ HTML classes de chaque élément. Le code l’appelle via $this->moduleHandler->alter('dxpr_builder_classes', ...), donc le nom de fonction se termine par _alter ; une fonction nommée mymodule_dxpr_builder_classes() n’est jamais appelée.

/**
 * 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) : la clé est un nom de classe, ou plusieurs séparés par des espaces ; la valeur est le libellé. Une clé qui commence par optgroup- démarre un groupe d’options.

Le tableau contient déjà les classes de chaque thème activé qui définit dxpr_builder_classes dans son .info.yml, donc un thème n’a pas besoin de PHP. Voir Classes utilitaires.

hook_dxpr_builder_icon_sets_alter

Tourne après que le module a fusionné chaque fichier *.dxpr_icon_sets.yml des modules et thèmes activés. Préférez le fichier YAML ; utilisez le hook quand la liste dépend de logique d’exécution.

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

Le hook tourne après résolution des chemins css relatifs des fichiers YAML, donc un jeu ajouté ici a besoin d’un chemin depuis la racine Drupal, comme dans l’exemple. Les clés d’un jeu d’icônes et les 14 jeux intégrés sont listés sur Jeux d’icônes personnalisés.

hook_dxpr_builder_view_elements

Appelé avec invokeAll() à la fin de DxprBuilderFormatter::viewElements(), après que le formateur a attaché ses bibliothèques, réglages et profil. $element est le tableau de rendu du champ, passé par référence. Il tourne pour chaque visiteur, contributeur ou non.

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

Hooks sans effet visible

  • hook_dxpr_builder_element_buttons_folders_alter() reçoit une liste de dossiers dont les fichiers .html décrivent des styles de boutons. Le résultat parvient à drupalSettings.dxprBuilder.buttonStyles. L’élément Button lit plutôt sa propre liste fixe de styles Bootstrap, donc des dossiers supplémentaires ne changent rien dans l’éditeur.
  • hook_dxpr_builder_elements_folders_alter() modifierait une liste de dossiers elements dans les thèmes, mais rien n’appelle getDxprElementsFolders(), donc le hook ne tourne jamais. Il n’enregistre pas les éléments ; pour en ajouter un, voir Éléments personnalisés.

Et ensuite ?