You are here

function viewfield_field_formatter_view in Viewfield 7.3

Same name and namespace in other branches
  1. 7.2 viewfield.module \viewfield_field_formatter_view()

Implements hook_field_formatter_view().

File

./viewfield.module, line 207
Defines a field type to display a view.

Code

function viewfield_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  list($entity_id) = entity_extract_ids($entity_type, $entity);
  $elements = array();
  switch ($display['type']) {
    case 'viewfield_default':
      $elements['#post_render'] = array(
        'viewfield_default_elements_post_render',
      );
      foreach ($items as $delta => $item) {

        // @todo Store name and display separately.
        list($view_name, $view_display) = explode('|', $item['vname'], 2);
        $view = views_get_view($view_name);
        $elements[$delta] = array(
          '#type' => 'viewfield',
          '#access' => $view && $view
            ->access($view_display),
          '#view' => $view,
          '#view_name' => $view_name,
          '#view_display' => $view_display,
          '#view_arguments' => $item['vargs'],
          '#entity_type' => $entity_type,
          '#entity_id' => $entity_id,
          '#entity' => $entity,
        );
      }
      break;
    case 'viewfield_field_values':
      foreach ($items as $delta => $item) {
        list($view_name, $view_display) = explode('|', $item['vname'], 2);
        $view = views_get_view($view_name);
        if (!is_object($view) || !isset($view->display[$view_display])) {
          $elements[$delta] = array(
            '#markup' => t('Missing or broken view/display'),
          );
          continue;
        }
        $items[$delta]['vname'] = 'View name: ' . $view->human_name;
        $items[$delta]['vdisplay'] = 'Display: ' . $view->display[$view_display]->display_title;
        $items[$delta]['vargs'] = 'Arguments: ' . $items[$delta]['vargs'];
        $fields_to_display = array_filter($display['settings']['fields_to_display']);
        $items[$delta] = array_intersect_key($items[$delta], $fields_to_display);
        krsort($items[$delta]);
        $elements[$delta][] = array(
          '#theme' => 'item_list',
          '#items' => $items[$delta],
        );
      }
      break;
  }
  return $elements;
}