function composed_field_field_formatter_view in Composed Field 7
Implements hook_field_formatter_view().
File
- ./
composed_field.module, line 869 - Defines composed field type.
Code
function composed_field_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
$settings = $display['settings'];
$element = array();
$widget_settings = $instance['widget']['settings'];
$number_of_subfields = $widget_settings['number_of_subfields'];
if (!$items) {
return;
}
// Set the default value for hidden, format, prefix and suffix.
$display_options = _composed_field_formatter_info_unserialize_display_options($settings['display_options'], $number_of_subfields);
foreach ($items as $delta => $item) {
$item = unserialize($item['composed']);
for ($subfield = 1; $subfield <= $number_of_subfields; $subfield++) {
if ($display_options['hidden'][$subfield]) {
$item[$subfield] = FALSE;
}
else {
// Show value pair of allowed values on instead of their key value.
if (isset($instance['widget']['settings'][$subfield]['select']['allowed_values'])) {
$allowed_values = $instance['widget']['settings'][$subfield]['select']['allowed_values'];
$item[$subfield] = empty($allowed_values[$item[$subfield]]) ? $item[$subfield] : $allowed_values[$item[$subfield]];
}
$item[$subfield] = $display_options['format'][$subfield] == '_none' ? check_plain($item[$subfield]) : check_markup($item[$subfield], $display_options['format'][$subfield]);
// Do not display prefix and suffix for empty subfields.
$item[$subfield] = $display_options['prefix'][$subfield] . $item[$subfield] . $display_options['suffix'][$subfield];
}
}
$items[$delta] = $item;
}
switch ($display['type']) {
case 'composed_field_fieldset':
foreach ($items as $delta => $item) {
$value = '';
foreach ($item as $subfield => $subfield_value) {
if ($subfield !== 1) {
$value .= $subfield_value;
}
}
$element[$delta] = array(
'#title' => $item[1],
'#value' => $value,
'#theme' => 'fieldset',
'#collapsible' => $settings['collapsible'],
'#collapsed' => $settings['collapsed'],
);
// theme_fieldset() doesn't handle '#collapsible', '#collapsed'
// arguments as claimed. See http://drupal.org/node/1099132
if ($settings['collapsible']) {
$element[$delta]['#attached'] = array(
'js' => array(
'misc/form.js',
'misc/collapse.js',
),
);
$element[$delta]['#attributes'] = array(
'class' => $settings['collapsed'] ? array(
'collapsible',
'collapsed',
) : array(
'collapsible',
),
);
}
}
break;
case 'composed_field_unformatted_list':
foreach ($items as $delta => $item) {
$element[$delta] = array(
'#display' => $display,
'#item' => $item,
'#theme' => 'composed_field',
);
}
break;
case 'composed_field_html_list':
foreach ($items as $item) {
$list_items[] = theme('composed_field', array(
'#display' => $display,
'#item' => $item,
'#theme' => 'composed_field',
));
}
$element[0] = array(
'#theme' => 'item_list',
'#type' => $settings['list_type'],
'#items' => $list_items,
);
break;
case 'composed_field_dialog':
$element[0] = array(
'#theme' => 'composed_field_dialog',
'#items' => $items,
);
break;
case 'composed_field_table':
foreach ($items as $delta => $item) {
$row = array();
if ($settings['table']['number_column']) {
$row[] = ++$delta;
}
foreach ($item as $subfield => $subfield_value) {
$row[] = $item[$subfield];
}
$rows[] = $row;
}
$header = array();
if (unserialize($settings['table']['column_label']) !== FALSE) {
$settings['table']['column_label'] = unserialize($settings['table']['column_label']);
}
else {
$settings['table']['column_label'] = array();
for ($subfield = 1; $subfield <= $number_of_subfields; $subfield++) {
$settings['table']['column_label'][$subfield] = '';
}
}
foreach ($settings['table']['column_label'] as $subfield => $subfield_value) {
if ($settings['table']['column_label'][$subfield]) {
if ($settings['table']['number_column']) {
$header[] = t('№');
}
$header[] = $settings['table']['column_label'][$subfield];
}
}
// Display all values in a single element.
$element[0] = array(
'#theme' => 'table',
'#rows' => $rows,
'#header' => $header,
);
break;
case 'composed_field_accordion':
$element[0] = array(
'#theme' => 'composed_field_accordion',
'#items' => $items,
);
break;
case 'composed_field_tabs':
$element[0] = array(
'#theme' => 'composed_field_tabs',
'#items' => $items,
);
break;
}
return $element;
}