diff --git a/core/includes/common.inc b/core/includes/common.inc index 1e403d2..9b994b3 100644 --- a/core/includes/common.inc +++ b/core/includes/common.inc @@ -4003,6 +4003,16 @@ function drupal_render(&$elements, $is_recursive_call = FALSE) { $suffix = isset($elements['#suffix']) ? $elements['#suffix'] : ''; $elements['#markup'] = $prefix . $elements['#children'] . $suffix; + // Collect all #post_render_cache callbacks associated with this element when: + // - it is the root element is a drupal_render() invocation; and + // - the first attempt to establish a post_render_cache turned up nothing + // because of pre-render functions in child elements that have not run yet. + if (!$is_recursive_call && empty($elements['#post_render_cache'])) { + $post_render_cache = drupal_render_collect_post_render_cache($elements); + if ($post_render_cache) { + $elements['#post_render_cache'] = $post_render_cache; + } + } // Cache the processed element if #cache is set. if (isset($elements['#cache'])) { diff --git a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php index dd20d1d..ec6ad9b 100644 --- a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php +++ b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php @@ -171,8 +171,8 @@ protected function getBuildDefaults(EntityInterface $entity, $view_mode = 'full' ); // Run field formatters. + $display = EntityViewDisplay::collectRenderDisplay($entity, $view_mode); foreach ($entity->getFieldDefinitions() as $field_name => $definition) { - $display = EntityViewDisplay::collectRenderDisplay($entity, $view_mode); if ($formatter = $display->getRenderer($field_name)) { $items = $entity->get($field_name); $return[$field_name] = $formatter->getDefaults($items);