function layout_builder_post_update_add_extra_fields
Ensure all extra fields are properly stored on entity view displays.
Previously \Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay::setComponent() was not correctly setting the configuration for extra fields. This function calls setComponent() for all extra field components to ensure the updated logic is invoked on all extra fields to correct the settings.
File
-
core/
modules/ layout_builder/ layout_builder.post_update.php, line 45
Code
function layout_builder_post_update_add_extra_fields(&$sandbox = NULL) {
$entity_field_manager = \Drupal::service('entity_field.manager');
\Drupal::classResolver(ConfigEntityUpdater::class)->update($sandbox, 'entity_view_display', function (LayoutEntityDisplayInterface $display) use ($entity_field_manager) {
if (!$display->isLayoutBuilderEnabled()) {
return FALSE;
}
$extra_fields = $entity_field_manager->getExtraFields($display->getTargetEntityTypeId(), $display->getTargetBundle());
$components = $display->getComponents();
// Sort the components to avoid them being reordered by setComponent().
uasort($components, 'Drupal\\Component\\Utility\\SortArray::sortByWeightElement');
$result = FALSE;
foreach ($components as $name => $component) {
if (isset($extra_fields['display'][$name])) {
$display->setComponent($name, $component);
$result = TRUE;
}
}
return $result;
});
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.