Custom field formatter settings
27/03/2017
This snippet for Drupal 7 is a follow up from this one: Crear formato personalizado para un campo de tipo fecha
In order to implement a settings form to our custom field formatter we only need to use the 'settings' parameter in the field formatter declaration (in hook_field_formatter_info()) and a few hooks.
Through the hook_field_formatter_settings_summary() we can implement a summary showing the configuration used.
With the hook_field_formatter_settings_form() we can implement the settings form itself. Then finally we only need to use the configuration on our hook_field_formatter_view() through the $display array like this:
$display['settings']['date_format'];
Code
<?php
/**
* Implements hook_field_formatter_info().
*/
function custom_module_field_formatter_info() {
return array(
'custom_date_format' => array(
'label' => t('Custom date format'),
'field types' => array('date', 'datestamp', 'datetime'),
'multiple values' => FIELD_BEHAVIOR_DEFAULT,
'settings' => array(
'date_format' => 'd M',
),
),
);
}
/**
* Implements hook_field_formatter_settings_summary().
*/
function custom_module_field_formatter_settings_summary($field, $instance, $view_mode) {
$display = $instance['display'][$view_mode];
$settings = $instance['display'][$view_mode]['settings'];
if ($display['type'] == 'custom_date_format') {
$output = t('Date render format: @format', array('@format' => $settings['date_format']));
}
return (isset($output)) ? $output : '';
}
/**
* Implements hook_field_formatter_settings_form().
*/
function custom_module_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
$display = $instance['display'][$view_mode];
$settings = $display['settings'];
if ($display['type'] == 'custom_date_format') {
$element['date_format'] = array(
'#type' => 'textfield',
'#title' => t('Example date format'),
'#default_value' => 'd M',
);
}
return $element;
}