You are here

function entity_class_formatter_entity_view_alter in Entity Class Formatter 8

Implements hook_entity_view_alter().

File

./entity_class_formatter.module, line 19
Entity Class Formatter module.

Code

function entity_class_formatter_entity_view_alter(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display) {

  // Skip entities which are not holding fields.
  if (!$entity instanceof FieldableEntityInterface) {
    return;
  }
  $fields = [];

  // Get fields configured by Layout Builder.
  if ($display instanceof LayoutEntityDisplayInterface && $display
    ->isLayoutBuilderEnabled()) {
    foreach ($display
      ->getSections() as $section) {
      foreach ($section
        ->getComponents() as $component) {
        $config = $component
          ->get('configuration');

        // Only if Entity Class formatter is used.
        if (isset($config['id']) && isset($config['formatter']['type'])) {
          $formatter = $config['formatter'];
          if ($formatter['type'] === 'entity_class_formatter') {

            // Extract field name from the component ID.
            [
              ,
              ,
              ,
              $name,
            ] = explode(':', $config['id']);
            if (!empty($name)) {
              $fields[$name][] = !empty($formatter['settings']) ? $formatter['settings'] : [];
            }
          }
        }
      }
    }
  }
  else {
    foreach ($display
      ->getComponents() as $name => $component) {

      // Only if Entity Class formatter is used.
      if (isset($component['type']) && $component['type'] === 'entity_class_formatter') {
        $fields[$name][] = !empty($component['settings']) ? $component['settings'] : [];
      }
    }
  }

  // Process all discovered fields.
  foreach ($fields as $name => $settings_set) {
    if (!$entity
      ->hasField($name)) {
      continue;
    }
    $field = $entity
      ->get($name);

    // Apply settings of every field instance.
    foreach ($settings_set as $settings) {
      _entity_class_formatter_apply($build, $field, $settings);
    }
  }
}