Skip to main content
3 of 6
edit : added search progress
Kojo
  • 3.5k
  • 4
  • 33
  • 62

How to render a field collection?

How can I properly render a field collection ? Is there any specific function for that ? I tried field_view_field but it does not output children fields.

My field collection is attached to a line item entity, and I want to display it in a Commerce checkout pane review.

function mymodule_pane_review($form, $form_state, $checkout_pane, $order) {
  //loading line item
  $line_item = commerce_line_item_load($order->commerce_line_items['und'][0]['line_item_id']);
  //rendering field collection named field_paxsup 
  $display = array('label' => 'hidden');
  $view = field_view_field('commerce_line_item', $line_item, 'field_paxsup', $display);
  return drupal_render($view);
}

This outputs an empty field. dsm(line_item->field_paxsup) gives me a integer value which is the field collection id. So I tried

function mymodule_pane_review($form, $form_state, $checkout_pane, $order) {
  //loading line item
  $line_item = commerce_line_item_load($order->commerce_line_items['und'][0]['line_item_id']);
  //loading field_collection
  $paxsup = entity_load('field_collection_item', array($line_item->field_paxsup['und'][0]['value']));
  
  return drupal_render(field_attach_view('field_collection_item',$paxsup, 'full'));
}

but get an error EntityMalformedException: Missing bundle property on entity of type field_collection_item

EDIT : I got a step forward, with the use either of

$paxsup = entity_load('field_collection_item', array($line_item->field_paxsup['und'][$n]['value']));
$paxs = end($paxsup);
//or shortcut, as per Marcavenger
$paxs = field_collection_field_get_entity($line_item->field_paxsup['und'][0]);

dsm($paxs) now returns

dsm($paxs)

So I can output a child field with

$view = field_view_field('field_collection_item', $paxsp, 'field_paxsup_civilite', $display);
return drupal_render($view);

But I feel stupid not to be able to concatenate field_view_field of each child field, or find a more elegant and simple way to output that field collection

Kojo
  • 3.5k
  • 4
  • 33
  • 62