مرجع واجهة الخطافات.

Learn DXPR BuilderExtendArchitectuur en API’s

يملك DXPR Builder خمسة خطافات. يوثّق dxpr_builder.api.php خمسها، مع مثال لكل منها.

الخطاف يُستدعى من الأثر
hook_dxpr_builder_classes_alter(&$classes) DxprBuilderService::editorAttach() يضيف فئات إلى قائمة فئات HTML في المحرّر
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 الخاص بكل عنصر. تستدعيه الشيفرة عبر $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',
    ],
  ];
}

يعمل الخطاف بعد حل مسارات css النسبية من ملفات YAML، فتحتاج المجموعة المضافة هنا مسارًا من جذر 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. لكن عنصر الزر يقرأ قائمته الثابتة الخاصة من أنماط Bootstrap بدل ذلك، فلا تغيّر المجلدات الإضافية شيئًا في المحرّر.
  • hook_dxpr_builder_elements_folders_alter() من شأنه تغيير قائمة مجلدات elements في القوالب، لكن لا شيء يستدعي getDxprElementsFolders()، فلا يعمل الخطاف أبدًا. وهو لا يسجّل عناصر؛ ولإضافة عنصر، انظر العناصر المخصصة.

ما الخطوة التالية؟