public EntityViewBuilder::buildMultiple(array $build_list)
Builds multiple entities' views; augments entity defaults.
This function is assigned as a #pre_render callback in ::viewMultiple().
By delaying the building of an entity until the #pre_render processing in drupal_render(), the processing cost of assembling an entity's renderable array is saved on cache-hit requests.
Parameters
array $build_list: A renderable array containing build information and context for an entity view.
Return value
array The updated renderable array.
See also
File
- core/lib/Drupal/Core/Entity/EntityViewBuilder.php, line 225
Class
- EntityViewBuilder
- Base class for entity view builders.
Namespace
Drupal\Core\Entity
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | public function buildMultiple( array $build_list ) { // Build the view modes and display objects. $view_modes = array (); $entity_type_key = "#{$this->entityTypeId}" ; $view_hook = "{$this->entityTypeId}_view" ; // Find the keys for the ContentEntities in the build; Store entities for // rendering by view_mode. $children = Element::children( $build_list ); foreach ( $children as $key ) { if (isset( $build_list [ $key ][ $entity_type_key ])) { $entity = $build_list [ $key ][ $entity_type_key ]; if ( $entity instanceof FieldableEntityInterface) { $view_modes [ $build_list [ $key ][ '#view_mode' ]][ $key ] = $entity ; } } } // Build content for the displays represented by the entities. foreach ( $view_modes as $view_mode => $view_mode_entities ) { $displays = EntityViewDisplay::collectRenderDisplays( $view_mode_entities , $view_mode ); $this ->buildComponents( $build_list , $view_mode_entities , $displays , $view_mode ); foreach ( array_keys ( $view_mode_entities ) as $key ) { // Allow for alterations while building, before rendering. $entity = $build_list [ $key ][ $entity_type_key ]; $display = $displays [ $entity ->bundle()]; $this ->moduleHandler()->invokeAll( $view_hook , [& $build_list [ $key ], $entity , $display , $view_mode ]); $this ->moduleHandler()->invokeAll( 'entity_view' , [& $build_list [ $key ], $entity , $display , $view_mode ]); $this ->alterBuild( $build_list [ $key ], $entity , $display , $view_mode ); // Assign the weights configured in the display. // @todo: Once https://www.drupal.org/node/1875974 provides the missing // API, only do it for 'extra fields', since other components have // been taken care of in EntityViewDisplay::buildMultiple(). foreach ( $display ->getComponents() as $name => $options ) { if (isset( $build_list [ $key ][ $name ])) { $build_list [ $key ][ $name ][ '#weight' ] = $options [ 'weight' ]; } } // Allow modules to modify the render array. $this ->moduleHandler()->alter( array ( $view_hook , 'entity_view' ), $build_list [ $key ], $entity , $display ); } } return $build_list ; } |
Please login to continue.