Referencia de la API de hooks.

Learn DXPR BuilderExtendArchitectuur en API’s

DXPR Builder tiene cinco hooks. dxpr_builder.api.php documenta los cinco, con un ejemplo de cada uno.

Hook Invocado desde Efecto
hook_dxpr_builder_classes_alter(&$classes) DxprBuilderService::editorAttach() Añade clases a la lista HTML classes en el editor
hook_dxpr_builder_icon_sets_alter(array &$icon_sets) DxprBuilderService::getIconSets() Añade, cambia o quita conjuntos de iconos en el selector de iconos
hook_dxpr_builder_view_elements(array &$element) DxprBuilderFormatter::viewElements() Altera el array de renderizado de cada campo mostrado con el formato de DXPR Builder
hook_dxpr_builder_element_buttons_folders_alter(&$folders) DxprBuilderService::getButtonStyles() Sin efecto visible; ver abajo
hook_dxpr_builder_elements_folders_alter(&$folders) DxprBuilderService::getDxprElementsFolders() Sin efecto visible; ver abajo

hook_dxpr_builder_classes_alter

Añade entradas a la lista de clases que el campo HTML classes de cada elemento ofrece. El código lo invoca con $this->moduleHandler->alter('dxpr_builder_classes', ...), así que el nombre de función termina en _alter; una función llamada mymodule_dxpr_builder_classes() nunca se llama.

/**
 * 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 clave es un nombre de clase, o varios separados por espacios; el valor es la etiqueta. Una clave que empieza con optgroup- inicia un grupo de opciones.

El array ya tiene las clases de cada tema habilitado que fija dxpr_builder_classes en su .info.yml, así que un tema no necesita PHP. Consulta Clases de utilidades.

hook_dxpr_builder_icon_sets_alter

Se ejecuta después de que el módulo fusionó cada archivo *.dxpr_icon_sets.yml de los módulos y temas habilitados. Prefiere el archivo YAML; usa el hook cuando la lista depende de lógica en tiempo de ejecución.

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

El hook se ejecuta después de que las rutas css relativas de los archivos YAML se resolvieron, así que un conjunto añadido aquí necesita una ruta desde la raíz Drupal, como en el ejemplo. Las claves de un conjunto de iconos y los 14 conjuntos incluidos se enumeran en Conjuntos de iconos personalizados.

hook_dxpr_builder_view_elements

Invocado con invokeAll() al final de DxprBuilderFormatter::viewElements(), después de que el formato adjuntó sus bibliotecas, ajustes y perfil. $element es el array de renderizado del campo, pasado por referencia. Se ejecuta para cada visita, edite o no.

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

Hooks sin efecto visible

  • hook_dxpr_builder_element_buttons_folders_alter() recibe una lista de carpetas cuyos archivos .html describen estilos de botón. El resultado llega a drupalSettings.dxprBuilder.buttonStyles. El elemento Button lee su propia lista fija de estilos Bootstrap, así que carpetas extra no cambian nada en el editor.
  • hook_dxpr_builder_elements_folders_alter() alteraría una lista de carpetas elements en temas, pero nada llama a getDxprElementsFolders(), así que el hook nunca se ejecuta. No registra elementos; para añadir uno, consulta Elementos personalizados.

¿Qué sigue?