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