---
url: 'https://dxpr.com/pt-pt/hc/documentacao/aprender-dxpr-builder/desenvolvimento/api-de-hooks'
title: 'Referência da API de hooks | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2026-10-24T11:47:54+00:00'
updated: '2026-10-24T17:19:22+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: |-
  O DXPR Builder tem cinco hooks. dxpr_builder.api.php documenta os
  cinco, com um exemplo de cada.
tags:
  - 'Architecture and APIs'
image: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
published: true
og:
  site_name: DXPR
  updated_time: '2026-10-24T17:19:22+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: 'Referência da API de hooks'
      description: |-
        O DXPR Builder tem cinco hooks. dxpr_builder.api.php documenta os
        cinco, com um exemplo de cada.
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-24T11:47:54+0000'
      dateModified: '2026-10-24T17:19:22+0000'
      author:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      mainEntityOfPage: 'https://dxpr.com/pt-pt/hc/documentacao/aprender-dxpr-builder/desenvolvimento/api-de-hooks'
      articleSection: 'Arquitetura e APIs'
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/pt-pt/hc/documentacao/aprender-dxpr-builder/desenvolvimento/api-de-hooks'
      description: |-
        O DXPR Builder tem cinco hooks. dxpr_builder.api.php documenta os
        cinco, com um exemplo de cada.
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: Início
            item: 'https://dxpr.com/pt-pt'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: pt-pt
---
[Centro de ajuda](/pt-pt/node/75)/[Documentação](/pt-pt/hc/documentacao) /[Aprender DXPR Builder](/pt-pt/hc/documentation/learn-dxpr-builder) /[Estender](/pt-pt/hc/documentation/learn-dxpr-builder/extend) /[Arquitetura e APIs](/pt-pt/hc/documentation/learn-dxpr-builder/extend/architecture) # Referência da API de hooks.

 Aprender DXPR BuilderEstenderArquitetura e APIs

   ## Neste guia

 Guias relacionados

- [Permissões](/pt-pt/hc/documentacao/aprender-dxpr-builder/desenvolvimento/permissoes)
- [Referência de API](/pt-pt/hc/documentacao/aprender-dxpr-builder/desenvolvimento/api)

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.

```php
/**
 * 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](/pt-pt/hc/documentacao/aprender-dxpr-builder/personalizacao/classes-utilitarias).

## 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.

```php
/**
 * 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](/pt-pt/hc/documentacao/aprender-dxpr-builder/desenvolvimento/conjuntos-de-icones).

## 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.

```php
/**
 * 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](/pt-pt/hc/documentacao/aprender-dxpr-builder/desenvolvimento/elementos-personalizados).

## O que se segue?

- [Permissões](/pt-pt/hc/documentacao/aprender-dxpr-builder/desenvolvimento/permissoes) para as permissões que o módulo define.
- [Referência de API](/pt-pt/hc/documentation/learn-dxpr-builder/development/api) para os serviços e rotas.