---
url: 'https://dxpr.com/zh-hans/hc/documentation/learn-dxpr-builder/development/hooks-api'
title: 'Hooks API 参考 | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2026-10-24T00:45:28+00:00'
updated: '2026-10-24T09:09:48+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: 'DXPR Builder 有五个钩子。dxpr_builder.api.php 记录了全部五个，每个都带示例。'
tags:
  - 'Architectuur en API’s'
image: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
published: true
og:
  site_name: DXPR
  updated_time: '2026-10-24T09:09:48+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: 'Hooks API 参考'
      description: 'DXPR Builder 有五个钩子。dxpr_builder.api.php 记录了全部五个，每个都带示例。'
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-24T00:45:28+0000'
      dateModified: '2026-10-24T09:09:48+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/zh-hans/hc/documentation/learn-dxpr-builder/development/hooks-api'
      articleSection: 'Architectuur en API’s'
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/zh-hans/hc/documentation/learn-dxpr-builder/development/hooks-api'
      description: 'DXPR Builder 有五个钩子。dxpr_builder.api.php 记录了全部五个，每个都带示例。'
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: 首页
            item: 'https://dxpr.com/zh-hans'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: zh-hans
---
[Help Center](/zh-hans/node/75)/[Documentation](/zh-hans/hc/documentation) /[Learn DXPR Builder](/hc/documentation/learn-dxpr-builder) /[Extend](/hc/documentation/learn-dxpr-builder/extend) /[Architectuur en API’s](/hc/documentation/learn-dxpr-builder/extend/architecture) # Hooks API 参考.

 Learn DXPR BuilderExtendArchitectuur en API’s

   ## In this guide

 Related guides

- [权限](/zh-hans/hc/documentation/learn-dxpr-builder/development/permissions)
- [API 参考](/zh-hans/hc/documentation/learn-dxpr-builder/development/api)

DXPR Builder 有五个钩子。`dxpr_builder.api.php` 记录了全部五个，每个都带示例。

| 钩子 | 调用方 | 效果 |
|---|---|---|
| `hook_dxpr_builder_classes_alter(&$classes)` | `DxprBuilderService::editorAttach()` | 向编辑器中 **HTML classes** 列表添加类 |
| `hook_dxpr_builder_icon_sets_alter(array &$icon_sets)` | `DxprBuilderService::getIconSets()` | 在图标选择器中添加、更改或移除图标集 |
| `hook_dxpr_builder_view_elements(array &$element)` | `DxprBuilderFormatter::viewElements()` | 更改每个用 DXPR Builder 格式化器显示的字段的渲染数组 |
| `hook_dxpr_builder_element_buttons_folders_alter(&$folders)` | `DxprBuilderService::getButtonStyles()` | 无可见效果；见下文 |
| `hook_dxpr_builder_elements_folders_alter(&$folders)` | `DxprBuilderService::getDxprElementsFolders()` | 无可见效果；见下文 |

## hook\_dxpr\_builder\_classes\_alter

向每个元素的 **HTML classes** 字段提供的类列表添加条目。代码通过 `$this->moduleHandler->alter('dxpr_builder_classes', ...)` 调用它，因此函数名以 `_alter` 结尾；名为 `mymodule_dxpr_builder_classes()` 的函数从不被调用。

```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`（数组）：键是一个类名，或用空格分隔的多个类名；值是标签。以 `optgroup-` 开头的键开始一个选项分组。

数组中已有每个设置了 `dxpr_builder_classes`（其 `.info.yml` 中）的启用主题的类，因此主题无需 PHP。请参阅 [实用类](/zh-hans/hc/documentation/learn-dxpr-builder/customization/utility-classes)。

## hook\_dxpr\_builder\_icon\_sets\_alter

在模块合并完启用模块和主题的所有 `*.dxpr_icon_sets.yml` 文件后运行。优先用 YAML 文件；列表依赖运行时逻辑时用钩子。

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

```

钩子在 YAML 文件的相对 `css` 路径解析后运行，因此这里添加的集需要从 Drupal 根目录起的路径，如示例。图标集的键和 14 个自带集见 [自定义图标集](/zh-hans/hc/documentation/learn-dxpr-builder/development/icon-sets)。

## hook\_dxpr\_builder\_view\_elements

用 `invokeAll()` 在 `DxprBuilderFormatter::viewElements()` 末尾调用，此时格式化器已附加其库、设置和档案。`$element` 是字段的渲染数组，按引用传递。它对每位查看者运行，编辑人员与否都一样。

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

```

## 无可见效果的钩子

- `hook_dxpr_builder_element_buttons_folders_alter()` 接收文件夹列表，其中的 `.html` 文件描述按钮样式。结果进入 `drupalSettings.dxprBuilder.buttonStyles`。Button 元素读取自己固定的 Bootstrap 样式列表，因此额外文件夹在编辑器中不改变任何内容。
- `hook_dxpr_builder_elements_folders_alter()` 会更改主题中 `elements` 文件夹的列表，但没有任何东西调用 `getDxprElementsFolders()`，因此钩子从不运行。它不注册元素；添加元素请参阅 [自定义元素](/zh-hans/hc/documentation/learn-dxpr-builder/development/custom-elements)。

## 接下来做什么？

- [权限](/zh-hans/hc/documentation/learn-dxpr-builder/development/permissions)：模块定义的权限。
- [API 参考](/zh-hans/hc/documentation/learn-dxpr-builder/development/api)：服务和路由。