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;
}