후크 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()를 호출하는 곳이 없으므로 후크가 실행되지 않습니다. 요소를 등록하지 않습니다. 추가하려면 다음을 보세요: 사용자 정의 요소.

다음 단계

  • 권한. 모듈이 정의하는 권한에 대한 내용.
  • API 참조. 서비스와 경로에 대한 내용.