function FieldBlockDeriver::getFieldMap
Same name in other branches
- 11.x core/modules/layout_builder/src/Plugin/Derivative/FieldBlockDeriver.php \Drupal\layout_builder\Plugin\Derivative\FieldBlockDeriver::getFieldMap()
Returns the entity field map for deriving block definitions.
Return value
array The entity field map.
See also
\Drupal\Core\Entity\EntityFieldManagerInterface::getFieldMap()
1 call to FieldBlockDeriver::getFieldMap()
- FieldBlockDeriver::getDerivativeDefinitions in core/
modules/ layout_builder/ src/ Plugin/ Derivative/ FieldBlockDeriver.php - Gets the definition of all derivatives of a base plugin.
File
-
core/
modules/ layout_builder/ src/ Plugin/ Derivative/ FieldBlockDeriver.php, line 168
Class
- FieldBlockDeriver
- Provides entity field block definitions for every field.
Namespace
Drupal\layout_builder\Plugin\DerivativeCode
protected function getFieldMap() : array {
$field_map = $this->entityFieldManager
->getFieldMap();
// If all fields are exposed as field blocks, just return the field map
// without any further processing.
if ($this->moduleHandler
->moduleExists('layout_builder_expose_all_field_blocks')) {
return $field_map;
}
// Load all entity view displays which are using Layout Builder.
/** @var \Drupal\layout_builder\Entity\LayoutEntityDisplayInterface[] $displays */
$displays = $this->entityViewDisplayStorage
->loadByProperties([
'third_party_settings.layout_builder.enabled' => TRUE,
]);
$layout_bundles = [];
foreach ($displays as $display) {
$bundle = $display->getTargetBundle();
$layout_bundles[$display->getTargetEntityTypeId()][$bundle] = $bundle;
}
// Process $field_map, removing any entity types which are not using Layout
// Builder.
$field_map = array_intersect_key($field_map, $layout_bundles);
foreach ($field_map as $entity_type_id => $fields) {
foreach ($fields as $field_name => $field_info) {
$field_map[$entity_type_id][$field_name]['bundles'] = array_intersect($field_info['bundles'], $layout_bundles[$entity_type_id]);
// If no bundles are using Layout Builder, remove this field from the
// field map.
if (empty($field_info['bundles'])) {
unset($field_map[$entity_type_id][$field_name]);
}
}
}
return $field_map;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.