Hooks API 参考.

Learn DXPR BuilderExtendArchitectuur en API’s

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() 的函数从不被调用。

/**
 * 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。请参阅 实用类。

hook_dxpr_builder_icon_sets_alter

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

/**
 * 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 个自带集见 自定义图标集。

hook_dxpr_builder_view_elements

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

/**
 * 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(),因此钩子从不运行。它不注册元素;添加元素请参阅 自定义元素。

接下来做什么?