diff --git a/core/modules/views/src/Entity/Render/EntityFieldRenderer.php b/core/modules/views/src/Entity/Render/EntityFieldRenderer.php index 396bb91..646b71b 100644 --- a/core/modules/views/src/Entity/Render/EntityFieldRenderer.php +++ b/core/modules/views/src/Entity/Render/EntityFieldRenderer.php @@ -123,6 +123,7 @@ public function preRender(array $values) { return; } + $this->build = []; $this->buildFields($values); } @@ -135,7 +136,8 @@ public function preRender(array $values) { * @see \Drupal\Core\Entity\Entity\EntityViewDisplay */ protected function buildFields(array $values) { - $build = []; + $build = &$this->build; + /** @var \Drupal\Core\Entity\FieldableEntityInterface[][] $entities */ $entities = []; /** @var \Drupal\Core\Entity\Entity\EntityViewDisplay[] $displays */ @@ -149,8 +151,8 @@ protected function buildFields(array $values) { // Retrieve entity translations to be processed. if (!isset($entities[$entity_type_id])) { - foreach ($values as $index => $result_row) { - $entities[$entity_type_id][$index] = $this->getEntityTranslation($field->getEntity($result_row), $result_row); + foreach ($values as $result_row) { + $entities[$entity_type_id][$result_row->index] = $this->getEntityTranslation($field->getEntity($result_row), $result_row); } } @@ -170,8 +172,6 @@ protected function buildFields(array $values) { $build[$index][$field_id] = $value; }); } - - $this->build = &$build; } /** @@ -228,7 +228,6 @@ public function render(ResultRow $row, Field $field = NULL) { throw new \RuntimeException('Missing call to ::preRender(). You have to run $view->render() before rendering individual fields.'); } - $build = []; if (isset($field)) { $field_id = $field->options['id']; if (!isset($this->build[$row->index][$field_id])) { @@ -238,6 +237,14 @@ public function render(ResultRow $row, Field $field = NULL) { // Free static cache to save memory. unset($this->build[$row->index][$field_id]); } + else { + if (!isset($this->build[$row->index])) { + $this->buildFields([$row]); + } + $build = $this->build[$row->index]; + // Free static cache to save memory. + unset($this->build[$row->index]); + } return $build; }