View source
<?php
define('GRID_FIELD_FORMATTER_DEFAULT_COLUMNS', 1);
function grid_field_formatter_menu() {
$items = array();
$items['admin/config/content/grid-field-formatter'] = array(
'title' => 'Grid Field Formatter Settings',
'description' => 'Configuration form page for the Grid Field Formatter supported field types.',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'grid_field_formatter_settings',
),
'file' => 'grid_field_formatter.admin.inc',
'access arguments' => array(
'administer site configuration',
),
);
return $items;
}
function grid_field_formatter_field_formatter_info_alter(&$infos) {
$field_types = variable_get('grid_field_formatter_field_types', array());
if (empty($field_types)) {
return;
}
$enable_field_type = array_filter($field_types);
$enabled_field_formatter = array();
foreach ($infos as $formatter_name => &$info) {
if (!isset($info['settings']) || !is_array($info['settings'])) {
$info['settings'] = array();
}
if (isset($info['field types'])) {
$info_types = $info['field types'];
foreach ($info_types as $type) {
if (in_array($type, $enable_field_type)) {
$info['settings'] += array(
'grid_field_formatter' => array(
'grid_enable' => FALSE,
'columns' => GRID_FIELD_FORMATTER_DEFAULT_COLUMNS,
),
);
$enabled_field_formatter[] = $formatter_name;
}
}
}
}
$enabled_field_formatter = array_unique($enabled_field_formatter);
cache_set('enabled_field_formatter', serialize($enabled_field_formatter));
}
function grid_field_formatter_field_formatter_settings_summary_alter(&$summary, $context) {
$enabled_field_formatter = array();
$enabled_field_formatter = grid_field_formatter_get_enabled_field_formatter();
$display = $context['instance']['display'][$context['view_mode']];
$settings = $display['settings'];
$type = $display['type'];
if (!isset($settings['grid_field_formatter']) || !in_array($type, $enabled_field_formatter)) {
return;
}
elseif (empty($settings['grid_field_formatter']['grid_enable'])) {
$summary .= ' ';
return;
}
$grid_enable = $settings['grid_field_formatter']['grid_enable'];
$columns = $settings['grid_field_formatter']['columns'];
$summary_items = array();
$summary_items[] = $summary;
$summary_items[] = t('Multi-value Grid display: enabled');
$summary_items[] = t('Number of columns: @columns', array(
'@columns' => $columns,
));
$summary = implode('<br/>', $summary_items);
}
function grid_field_formatter_field_formatter_settings_form_alter(&$settings_form, $context) {
$enabled_field_formatter = array();
$enabled_field_formatter = grid_field_formatter_get_enabled_field_formatter();
$field = $context['field'];
$entity_type = $context['instance']['entity_type'];
$display = $context['instance']['display'][$context['view_mode']];
$settings = $display['settings'];
$type = $display['type'];
if (!isset($settings['grid_field_formatter']) || !in_array($type, $enabled_field_formatter)) {
return;
}
$settings['grid_field_formatter']['grid_enable'] = isset($settings['grid_field_formatter']['grid_enable']) ? $settings['grid_field_formatter']['grid_enable'] : FALSE;
$settings['grid_field_formatter']['columns'] = isset($settings['grid_field_formatter']['columns']) ? $settings['grid_field_formatter']['columns'] : '';
$settings_form['grid_field_formatter'] = array(
'#type' => 'container',
'#attributes' => array(
'class' => array(
'grided-field-wrapper',
),
),
);
$settings_form['grid_field_formatter']['grid_enable'] = array(
'#title' => t('Enable multi-value field display with a grid layout.'),
'#type' => 'checkbox',
'#default_value' => $settings['grid_field_formatter']['grid_enable'],
);
$settings_form['grid_field_formatter']['columns'] = array(
'#title' => t('Grid layout number of columns'),
'#type' => 'textfield',
'#default_value' => isset($settings['grid_field_formatter']['columns']) ? $settings['grid_field_formatter']['columns'] : GRID_FIELD_FORMATTER_DEFAULT_COLUMNS,
'#description' => t('Enter the number of columns for each row for the grid table layout.'),
'#element_validate' => array(
'grid_field_formatter_element_validate_columns',
),
'#states' => array(
'visible' => array(
'input[name$="[settings][grid_field_formatter][grid_enable]"]' => array(
'checked' => TRUE,
),
),
),
);
}
function grid_field_formatter_field_attach_view_alter(&$output, $context) {
foreach (element_children($output) as $field_name) {
$enabled_field_formatter = array();
$enabled_field_formatter = grid_field_formatter_get_enabled_field_formatter();
$element = $output[$field_name];
$instance = field_info_instance($element['#entity_type'], $field_name, $element['#bundle']);
$display = isset($instance['display'][$context['view_mode']]) ? $instance['display'][$context['view_mode']] : $instance['display']['default'];
$settings = $display['settings'];
$type = $display['type'];
$field = field_info_field($field_name);
if (!isset($settings['grid_field_formatter']) || empty($settings['grid_field_formatter']['grid_enable']) || !in_array($type, $enabled_field_formatter)) {
continue;
}
$output[$field_name]['#theme'] = 'grid_field_formatter';
$output[$field_name]['#columns'] = isset($settings['grid_field_formatter']['columns']) ? $settings['grid_field_formatter']['columns'] : 1;
}
}
function grid_field_formatter_element_validate_columns($element, &$form_state) {
$value = $element['#value'];
if (!(is_numeric($value) && $value > 0)) {
form_error($element, t('The number of columns must be valid number and greater than 0.'));
}
}
function grid_field_formatter_theme($existing, $type, $theme, $path) {
return array(
'grid_field_formatter' => array(
'render element' => 'element',
'template' => 'grid-field-formatter',
),
);
}
function template_preprocess_grid_field_formatter(&$variables, $hook) {
template_preprocess_field($variables, $hook);
$variables['columns'] = $variables['element']['#columns'];
$variables['theme_hook_suggestions'] = array(
'grid_field_formatter__' . $variables['element']['#field_type'],
'grid_field_formatter__' . $variables['element']['#field_name'],
'grid_field_formatter__' . $variables['element']['#field_name'] . '__' . $variables['element']['#bundle'],
) + $variables['theme_hook_suggestions'];
}
function grid_field_formatter_get_enabled_field_formatter() {
$enabled_field_formatter_cache = cache_get('enabled_field_formatter');
$enabled_field_formatter = isset($enabled_field_formatter_cache->data) ? unserialize($enabled_field_formatter_cache->data) : array();
return $enabled_field_formatter;
}
function grid_field_formatter_field_types_options_list() {
$options = array();
foreach (field_info_field_types() as $type_name => $type) {
$options[$type_name] = $type['label'];
}
return $options;
}