function entityreference_multiple_field_formatter_settings_form in Entity reference multiple display 7
Implements hook_field_formatter_settings_form().
File
- ./
entityreference_multiple.module, line 35 - Extend entity reference formatter with an option to separate elements display with specific view_modes.
Code
function entityreference_multiple_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
$display = $instance['display'][$view_mode];
$settings = $display['settings'];
// do not interfer with entityreference
if ($display['type'] == 'entityreference_entity_multiple_view') {
$entity_info = entity_get_info($field['settings']['target_type']);
$options = array();
if (!empty($entity_info['view modes'])) {
foreach ($entity_info['view modes'] as $view_mode => $view_mode_settings) {
$options[$view_mode] = $view_mode_settings['label'];
}
}
if (count($options) > 1) {
// Build settings form
$element['view_mode_number'] = array(
'#type' => 'select',
'#options' => drupal_map_assoc(range(1, 10)),
'#title' => t('Number of groups'),
'#default_value' => $settings['view_mode_number'],
'#ajax' => array(
'callback' => 'entityreference_multiple_callback',
'wrapper' => 'view_mode_multiple_' . $field['field_name'],
'method' => 'replace',
'effect' => 'fade',
),
'#attributes' => array(
// add rel to get field name for ajax callback
'rel' => $field['field_name'],
'alt' => t('Enter a number of group to split display.'),
'title' => t('Enter a number of group to split display.'),
),
);
// container needed for ajax call
$element['view_mode_multiple'] = array(
'#type' => 'container',
'#attributes' => array(
'id' => array(
'view_mode_multiple_' . $field['field_name'],
),
),
);
// Ajax logic: if a values is set we need to handle it
if (isset($form_state['values']['fields'][$field['field_name']]['settings_edit_form']['settings']['view_mode_number'])) {
$group_number = $form_state['values']['fields'][$field['field_name']]['settings_edit_form']['settings']['view_mode_number'];
}
else {
$group_number = $settings['view_mode_number'];
}
// Build settings for each group
for ($i = 1; $i <= $group_number; $i++) {
$element['view_mode_multiple']['view_mode_' . $i] = array(
'#type' => 'select',
'#options' => $options,
'#title' => t('View mode group !num', array(
'!num' => $i,
)),
'#default_value' => $settings['view_mode_multiple']['view_mode_' . $i],
'#prefix' => '<div class="limit-float">',
'#suffix' => '</div>',
);
$element['view_mode_multiple']['view_mode_' . $i . '_number'] = array(
'#type' => 'textfield',
'#title' => t('Elements'),
'#size' => 2,
'#maxlength' => 2,
'#default_value' => $settings['view_mode_multiple']['view_mode_' . $i . '_number'],
'#required' => TRUE,
'#element_validate' => array(
'entityreference_multiple_number_validate',
),
'#prefix' => '<div class="limit-float">',
'#suffix' => '</div><div class="clearfix"></div>',
'#attributes' => array(
'alt' => t('Enter a number to limit the number of items concerned by this mode, fill # for all items left, so it should be used only for the last group.'),
'title' => t('Enter a number to limit the number of items concerned by this mode, fill # for all items left, so it should be used only for the last group.'),
),
);
$element['view_mode_multiple']['view_mode_' . $i . '_links'] = array(
'#type' => 'checkbox',
'#title' => t('Show links'),
'#default_value' => $settings['view_mode_multiple']['view_mode_' . $i . '_links'],
);
}
}
return $element;
}
}