diff --git a/core/modules/layout_builder/src/Plugin/Derivative/FieldBlockDeriver.php b/core/modules/layout_builder/src/Plugin/Derivative/FieldBlockDeriver.php index 14d7b1bb0c..71b9c1e316 100644 --- a/core/modules/layout_builder/src/Plugin/Derivative/FieldBlockDeriver.php +++ b/core/modules/layout_builder/src/Plugin/Derivative/FieldBlockDeriver.php @@ -88,52 +88,28 @@ public static function create(ContainerInterface $container, $base_plugin_id) { public function getDerivativeDefinitions($base_plugin_definition) { $entity_type_labels = $this->entityTypeRepository->getEntityTypeLabels(); foreach ($this->entityFieldManager->getFieldMap() as $entity_type_id => $entity_field_map) { - foreach ($this->entityFieldManager->getFieldStorageDefinitions($entity_type_id) as $field_storage_definition) { - $derivative = $base_plugin_definition; - $field_name = $field_storage_definition->getName(); - - // The blocks are based on fields. However, we are looping through field - // storages for which no fields may exist. If that is the case, skip - // this field storage. - if (!isset($entity_field_map[$field_name])) { - continue; - } - $field_info = $entity_field_map[$field_name]; - + foreach ($entity_field_map as $field_name => $field_info) { // Skip fields without any formatters. - $options = $this->formatterManager->getOptions($field_storage_definition->getType()); + $options = $this->formatterManager->getOptions($field_info['type']); if (empty($options)) { continue; } foreach ($field_info['bundles'] as $bundle) { + $derivative = $base_plugin_definition; + $field_definition = $this->entityFieldManager->getFieldDefinitions($entity_type_id, $bundle)[$field_name]; + // Store the default formatter on the definition. $derivative['default_formatter'] = ''; - $field_type_definition = $this->fieldTypeManager->getDefinition($field_storage_definition->getType()); + $field_type_definition = $this->fieldTypeManager->getDefinition($field_info['type']); if (isset($field_type_definition['default_formatter'])) { $derivative['default_formatter'] = $field_type_definition['default_formatter']; } - // Get the admin label for both base and configurable fields. - if ($field_storage_definition->isBaseField()) { - $admin_label = $field_storage_definition->getLabel(); - } - else { - $bundle_field_definitions = $this->entityFieldManager->getFieldDefinitions($entity_type_id, $bundle); - // The field storage config may exist, but it's possible that no - // fields are actually using it. If that's the case, skip to the - // next bundle. - if (empty($bundle_field_definitions[$field_name])) { - continue; - } - $admin_label = $bundle_field_definitions[$field_name]->getLabel(); - } - - // Set plugin definition for derivative. $derivative['category'] = $this->t('@entity', ['@entity' => $entity_type_labels[$entity_type_id]]); - $derivative['admin_label'] = $admin_label; - $field_definition = $this->entityFieldManager->getFieldDefinitions($entity_type_id, $bundle)[$field_name]; + $derivative['admin_label'] = $field_definition->getLabel(); + // Add a dependency on the field if it is configurable. if ($field_definition instanceof FieldConfigInterface) { $derivative['config_dependencies'][$field_definition->getConfigDependencyKey()][] = $field_definition->getConfigDependencyName();