diff --git a/core/modules/views/src/Entity/Render/EntityFieldRenderer.php b/core/modules/views/src/Entity/Render/EntityFieldRenderer.php index 55d5459..513ed2a 100644 --- a/core/modules/views/src/Entity/Render/EntityFieldRenderer.php +++ b/core/modules/views/src/Entity/Render/EntityFieldRenderer.php @@ -140,11 +140,16 @@ protected function buildFields(array $values) { // Retrieve entity translations to be processed. if (!isset($entities[$entity_type_id])) { foreach ($values as $result_row) { - $entities[$entity_type_id][$result_row->index] = $this->getEntityTranslation($field->getEntity($result_row), $result_row); + $entity = $field->getEntity($result_row); + $entities[$entity_type_id][$entity->bundle()][$result_row->index] = $this->getEntityTranslation($entity, $result_row); } } // Prepare the display object to be used for this entity type. + // @todo Note : given the current code in EVD->buildFieldMultiple(), we don't + // actually need to create an EVD dor each bundle (in fact we could even reuse the + // same single EVD for all entity types). This shows that EVD->buildFieldMultiple() + // belongs somewhere else, since it does in fact not depend on the values in the EVD. if (!isset($displays[$entity_type_id])) { $display_values = [ 'targetEntityType' => $entity_type_id, @@ -154,11 +159,16 @@ protected function buildFields(array $values) { $displays[$entity_type_id] = new EntityViewDisplay($display_values, $entity_type_id); } - // Build field render array for the current entity type. - $field_build = $displays[$entity_type_id]->buildFieldMultiple($entities[$entity_type_id], $field->getFieldDefinition(), $field->options['type'], $field->options['settings']); - array_walk($field_build, function ($value, $index) use (&$build, $field_id) { - $build[$index][$field_id] = $value; - }); + // Build field render array for each bundle. + foreach ($entities[$entity_type_id] as $bundle => $bundle_entities) { + // At this point, we can use the "real" field definition for this + // specific bundle. + $field_definition = $this->entityManager->getFieldDefinitions($entity_type_id, $bundle)[$field->definition['field_name']]; + $field_build = $displays[$entity_type_id]->buildFieldMultiple($bundle_entities, $field_definition, $field->options['type'], $field->options['settings']); + array_walk($field_build, function ($value, $index) use (&$build, $field_id) { + $build[$index][$field_id] = $value; + }); + } } }