You are here

function Field::get_items in Views (for Drupal 7) 8.3

Return an array of items for the field.

File

lib/Views/field/Plugin/views/field/Field.php, line 640
Definition of Views\field\Plugin\views\field\Field.

Class

Field
A field that displays fieldapi fields.

Namespace

Views\field\Plugin\views\field

Code

function get_items($values) {
  $original_entity = $this
    ->get_entity($values);
  if (!$original_entity) {
    return array();
  }
  $entity = $this
    ->process_entity($original_entity);
  if (!$entity) {
    return array();
  }
  $display = array(
    'type' => $this->options['type'],
    'settings' => $this->options['settings'],
    'label' => 'hidden',
    // Pass the View object in the display so that fields can act on it.
    'views_view' => $this->view,
    'views_field' => $this,
    'views_row_id' => $this->view->row_index,
  );
  $entity_type = $entity
    ->entityType();
  $langcode = $this
    ->field_langcode($entity_type, $entity);
  $render_array = field_view_field($entity_type, $entity, $this->definition['field_name'], $display, $langcode);
  $items = array();
  if ($this->options['field_api_classes']) {

    // Make a copy.
    $array = $render_array;
    return array(
      array(
        'rendered' => drupal_render($render_array),
      ),
    );
  }
  foreach (element_children($render_array) as $count) {
    $items[$count]['rendered'] = $render_array[$count];

    // field_view_field() adds an #access property to the render array that
    // determines whether or not the current user is allowed to view the
    // field in the context of the current entity. We need to respect this
    // parameter when we pull out the children of the field array for
    // rendering.
    if (isset($render_array['#access'])) {
      $items[$count]['rendered']['#access'] = $render_array['#access'];
    }

    // Only add the raw field items (for use in tokens) if the current user
    // has access to view the field content.
    if ((!isset($items[$count]['rendered']['#access']) || $items[$count]['rendered']['#access']) && !empty($render_array['#items'][$count])) {
      $items[$count]['raw'] = $render_array['#items'][$count];
    }
  }
  return $items;
}