You are here

function commerce_product_reference_field_formatter_view in Commerce Core 7

Implements hook_field_formatter_view().

File

modules/product_reference/commerce_product_reference.module, line 835
Defines a field type for referencing products from other entities.

Code

function commerce_product_reference_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $result = array();

  // Collect the list of product IDs.
  $product_ids = array();
  foreach ($items as $delta => $item) {
    $product_ids[$item['product_id']] = $item['product_id'];
  }

  // Exit now if we didn't find any product IDs.
  if (empty($product_ids)) {
    return;
  }

  // Load the referenced products.
  $products = commerce_product_load_multiple($product_ids, array(
    'status' => 1,
  ));
  switch ($display['type']) {
    case 'commerce_product_reference_sku_link':
    case 'commerce_product_reference_sku_plain':
      foreach ($items as $delta => $item) {
        if (!empty($products[$item['product_id']])) {
          if ($display['type'] == 'commerce_product_reference_sku_link') {
            $result[$delta] = array(
              '#type' => 'link',
              '#title' => $products[$item['product_id']]->sku,
              '#href' => 'admin/commerce/products/' . $item['product_id'],
            );
          }
          else {
            $result[$delta] = array(
              '#markup' => check_plain($products[$item['product_id']]->sku),
            );
          }
        }
      }
      break;
    case 'commerce_product_reference_title_link':
    case 'commerce_product_reference_title_plain':
      foreach ($items as $delta => $item) {
        if (!empty($products[$item['product_id']])) {
          if ($display['type'] == 'commerce_product_reference_title_link') {
            $result[$delta] = array(
              '#type' => 'link',
              '#title' => $products[$item['product_id']]->title,
              '#href' => 'admin/commerce/products/' . $item['product_id'],
            );
          }
          else {
            $result[$delta] = array(
              '#markup' => check_plain($products[$item['product_id']]->title),
            );
          }
        }
      }
      break;
    case 'commerce_product_reference_rendered_product':
      foreach ($items as $delta => $item) {

        // Protect ourselves from recursive rendering.
        static $depth = 0;
        $depth++;
        if ($depth > 20) {
          throw new CommerceProductReferenceRecursiveRenderingException(t('Recursive rendering detected when rendering product (@product_id). Aborting rendering.', array(
            '@product_id' => $item['product_id'],
          )));
        }
        $entity = clone $item['entity'];
        unset($entity->content);
        $result[$delta] = entity_view('commerce_product', array(
          $item['product_id'] => $entity,
        ), $display['settings']['view_mode'], $langcode, $display['settings']['page']);
        $depth = 0;
      }
      break;
  }
  return $result;
}