public function EntityRenderController::buildContent

Implements Drupal\Core\Entity\EntityRenderControllerInterface::buildContent().

Overrides EntityRenderControllerInterface::buildContent

3 methods override EntityRenderController::buildContent()

File

drupal/core/lib/Drupal/Core/Entity/EntityRenderController.php, line 29
Definition of Drupal\Core\Entity\EntityRenderController.

Class

EntityRenderController
Base class for entity view controllers.

Namespace

Drupal\Core\Entity

Code

public function buildContent(array $entities = array(), $view_mode = 'full', $langcode = NULL) {

  // Allow modules to change the view mode.
  $context = array(
    'langcode' => $langcode,
  );
  $prepare = array();
  foreach ($entities as $key => $entity) {

    // Remove previously built content, if exists.
    $entity->content = array();
    drupal_alter('entity_view_mode', $view_mode, $entity, $context);
    $entity->content['#view_mode'] = $view_mode;
    $prepare[$view_mode][$key] = $entity;
  }

  // Prepare and build field content, grouped by view mode.
  foreach ($prepare as $view_mode => $prepare_entities) {
    $call = array();

    // To ensure hooks are only run once per entity, check for an
    // entity_view_prepared flag and only process items without it.
    foreach ($prepare_entities as $entity) {
      if (empty($entity->entity_view_prepared)) {

        // Add this entity to the items to be prepared.
        $call[$entity
          ->id()] = $entity;

        // Mark this item as prepared.
        $entity->entity_view_prepared = TRUE;
      }
    }
    if (!empty($call)) {
      field_attach_prepare_view($this->entityType, $call, $view_mode, $langcode);
      module_invoke_all('entity_prepare_view', $call, $this->entityType);
    }
    foreach ($entities as $entity) {
      $entity->content += field_attach_view($this->entityType, $entity, $view_mode, $langcode);
    }
  }
}