Implements \Drupal\Core\Entity\EntityRenderControllerInterface::viewMultiple().
Overrides EntityRenderControllerInterface::viewMultiple
public function viewMultiple(array $entities = array(), $view_mode = 'full', $langcode = NULL) {
if (!isset($langcode)) {
$langcode = language(Language::TYPE_CONTENT)->langcode;
}
// Build the view modes and display objects.
$view_modes = array();
$displays = array();
$context = array(
'langcode' => $langcode,
);
foreach ($entities as $entity) {
$bundle = $entity
->bundle();
// Allow modules to change the view mode.
$entity_view_mode = $view_mode;
drupal_alter('entity_view_mode', $entity_view_mode, $entity, $context);
// Store entities for rendering by view_mode.
$view_modes[$entity_view_mode][$entity
->id()] = $entity;
// Load the corresponding display settings if not stored yet.
if (!isset($displays[$entity_view_mode][$bundle])) {
// Get the display object for this bundle and view mode.
$display = entity_get_render_display($entity, $entity_view_mode);
// Let modules alter the display.
$display_context = array(
'entity_type' => $this->entityType,
'bundle' => $bundle,
'view_mode' => $entity_view_mode,
);
drupal_alter('entity_display', $display, $display_context);
$displays[$entity_view_mode][$bundle] = $display;
}
}
foreach ($view_modes as $mode => $view_mode_entities) {
$this
->buildContent($view_mode_entities, $displays[$mode], $mode, $langcode);
}
$view_hook = "{$this->entityType}_view";
$build = array(
'#sorted' => TRUE,
);
$weight = 0;
foreach ($entities as $key => $entity) {
$entity_view_mode = isset($entity->content['#view_mode']) ? $entity->content['#view_mode'] : $view_mode;
$display = $displays[$entity_view_mode][$entity
->bundle()];
module_invoke_all($view_hook, $entity, $display, $entity_view_mode, $langcode);
module_invoke_all('entity_view', $entity, $display, $entity_view_mode, $langcode);
$build[$key] = $entity->content;
// We don't need duplicate rendering info in $entity->content.
unset($entity->content);
$build[$key] += $this
->getBuildDefaults($entity, $entity_view_mode, $langcode);
$this
->alterBuild($build[$key], $entity, $display, $entity_view_mode, $langcode);
// Assign the weights configured in the display.
foreach ($display
->getComponents() as $name => $options) {
if (isset($build[$key][$name])) {
$build[$key][$name]['#weight'] = $options['weight'];
}
}
$build[$key]['#weight'] = $weight++;
// Allow modules to modify the render array.
drupal_alter(array(
$view_hook,
'entity_view',
), $build[$key], $entity, $display);
}
return $build;
}