Hooks APIリファレンス.

Learn DXPR BuilderExtendArchitectuur en API’s

DXPR Builderには5つのフックがあります。すべて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(配列)。キーは1つのクラス名、またはスペース区切りの複数。値はラベルです。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()を呼び出すものがないため、このフックは実行されません。エレメントの登録は行いません。追加するにはカスタムエレメントをご覧ください。

次のステップ