Referência da API de hooks.

Learn DXPR BuilderExtendArchitectuur en API’s

O DXPR Builder tem cinco hooks. dxpr_builder.api.php documenta os cinco, com um exemplo de cada.

Hook Invoked from Effect
hook_dxpr_builder_classes_alter(&$classes) DxprBuilderService::editorAttach() Adiciona classes à lista HTML classes no editor
hook_dxpr_builder_icon_sets_alter(array &$icon_sets) DxprBuilderService::getIconSets() Adiciona, muda ou remove conjuntos de ícones no seletor de ícones
hook_dxpr_builder_view_elements(array &$element) DxprBuilderFormatter::viewElements() Altera o render array de cada campo apresentado com o formatador do DXPR Builder
hook_dxpr_builder_element_buttons_folders_alter(&$folders) DxprBuilderService::getButtonStyles() Sem efeito visível; ver abaixo
hook_dxpr_builder_elements_folders_alter(&$folders) DxprBuilderService::getDxprElementsFolders() Sem efeito visível; ver abaixo

hook_dxpr_builder_classes_alter

Adiciona entradas à lista de classes que o campo HTML classes de cada elemento oferece. O código invoca-o através de $this->moduleHandler->alter('dxpr_builder_classes', ...), por isso o nome da função termina em _alter; uma função chamada mymodule_dxpr_builder_classes() nunca é chamada.

/**
 * 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): a chave é um nome de classe, ou vários separados por espaços; o valor é a etiqueta. Uma chave que começa com optgroup- inicia um grupo de opções.

O array já tem as classes de cada tema ativo que define dxpr_builder_classes no .info.yml, por isso um tema não precisa de PHP. Consulte Classes utilitárias.

hook_dxpr_builder_icon_sets_alter

Corre depois de o módulo juntar cada ficheiro *.dxpr_icon_sets.yml dos módulos e temas ativos. Prefira o ficheiro YAML; use o hook quando a lista depende de lógica de execução.

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

O hook corre depois de os caminhos css relativos dos ficheiros YAML terem sido resolvidos, por isso um conjunto adicionado aqui precisa de um caminho da raiz do Drupal, como no exemplo. As chaves de um conjunto de ícones e os 14 conjuntos incluídos estão enumerados em Conjuntos de ícones personalizados.

hook_dxpr_builder_view_elements

Invocado com invokeAll() no fim de DxprBuilderFormatter::viewElements(), depois de o formatador ter anexado bibliotecas, definições e perfil. $element é o render array do campo, passado por referência. Corre para cada visitante, editor ou não.

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

Hooks sem efeito visível

  • hook_dxpr_builder_element_buttons_folders_alter() recebe uma lista de pastas cujos ficheiros .html descrevem estilos de botão. O resultado chega a drupalSettings.dxprBuilder.buttonStyles. O elemento Button lê antes a própria lista fixa de estilos Bootstrap, por isso pastas extra nada mudam no editor.
  • hook_dxpr_builder_elements_folders_alter() alteraria uma lista de pastas elements em temas, mas nada chama getDxprElementsFolders(), por isso o hook nunca corre. Não regista elementos; para adicionar um, consulte Elementos personalizados.

O que se segue?