field_layout.module 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. /**
  3. * @file
  4. * Provides hook implementations for Field Layout.
  5. */
  6. use Drupal\Core\Entity\ContentEntityFormInterface;
  7. use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
  8. use Drupal\Core\Entity\EntityInterface;
  9. use Drupal\Core\Form\FormStateInterface;
  10. use Drupal\Core\Routing\RouteMatchInterface;
  11. use Drupal\field_layout\Display\EntityDisplayWithLayoutInterface;
  12. use Drupal\field_layout\Entity\FieldLayoutEntityFormDisplay;
  13. use Drupal\field_layout\Entity\FieldLayoutEntityViewDisplay;
  14. use Drupal\field_layout\FieldLayoutBuilder;
  15. use Drupal\field_layout\Form\FieldLayoutEntityFormDisplayEditForm;
  16. use Drupal\field_layout\Form\FieldLayoutEntityViewDisplayEditForm;
  17. /**
  18. * Implements hook_help().
  19. */
  20. function field_layout_help($route_name, RouteMatchInterface $route_match) {
  21. switch ($route_name) {
  22. case 'help.page.field_layout':
  23. $output = '<h3>' . t('About') . '</h3>';
  24. $output .= '<p>' . t('The Field Layout module allows you to arrange fields into regions on forms and displays of entities such as nodes and users.') . '</p>';
  25. $output .= '<p>' . t('For more information, see the <a href=":field-layout-documentation">online documentation for the Field Layout module</a>.', [':field-layout-documentation' => 'https://www.drupal.org/documentation/modules/field_layout']) . '</p>';
  26. return $output;
  27. }
  28. }
  29. /**
  30. * Implements hook_entity_type_alter().
  31. */
  32. function field_layout_entity_type_alter(array &$entity_types) {
  33. /** @var $entity_types \Drupal\Core\Entity\EntityTypeInterface[] */
  34. $entity_types['entity_view_display']->setClass(FieldLayoutEntityViewDisplay::class);
  35. $entity_types['entity_form_display']->setClass(FieldLayoutEntityFormDisplay::class);
  36. // The form classes are only needed when Field UI is installed.
  37. if (\Drupal::moduleHandler()->moduleExists('field_ui')) {
  38. $entity_types['entity_view_display']->setFormClass('edit', FieldLayoutEntityViewDisplayEditForm::class);
  39. $entity_types['entity_form_display']->setFormClass('edit', FieldLayoutEntityFormDisplayEditForm::class);
  40. }
  41. }
  42. /**
  43. * Implements hook_entity_view_alter().
  44. */
  45. function field_layout_entity_view_alter(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display) {
  46. if ($display instanceof EntityDisplayWithLayoutInterface) {
  47. \Drupal::classResolver()->getInstanceFromDefinition(FieldLayoutBuilder::class)
  48. ->buildView($build, $display);
  49. }
  50. }
  51. /**
  52. * Implements hook_form_alter().
  53. */
  54. function field_layout_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  55. $form_object = $form_state->getFormObject();
  56. if ($form_object instanceof ContentEntityFormInterface && $display = $form_object->getFormDisplay($form_state)) {
  57. if ($display instanceof EntityDisplayWithLayoutInterface) {
  58. \Drupal::classResolver()->getInstanceFromDefinition(FieldLayoutBuilder::class)
  59. ->buildForm($form, $display);
  60. }
  61. }
  62. }