field_multiple_classes.module in Field multiple classes 7
Provides formatter settings for classes on multi-value fields.
Based on Field Multiple Limit module (http://drupal.org/project/field_multiple_limit).
File
field_multiple_classes.moduleView source
<?php
/**
* @file
* Provides formatter settings for classes on multi-value fields.
*
* Based on Field Multiple Limit module (http://drupal.org/project/field_multiple_limit).
*/
/**
* Implements hook_field_formatter_info_alter().
*/
function field_multiple_classes_field_formatter_info_alter(&$info) {
// Added to all formatters.
foreach ($info as $formatter_key => &$formatter) {
$formatter['settings']['field_multiple_classes'] = 0;
$formatter['settings']['field_multiple_classes_every'] = 3;
}
}
/**
* Implements hook_field_formatter_settings_summary_alter().
*/
function field_multiple_classes_field_formatter_settings_summary_alter(&$summary, $context) {
if ($context['field']['cardinality'] > 1 || $context['field']['cardinality'] == FIELD_CARDINALITY_UNLIMITED) {
$settings = $context['instance']['display'][$context['view_mode']]['settings'];
if (!empty($summary)) {
$summary .= '<br />';
}
if (!empty($settings['field_multiple_classes']) && $settings['field_multiple_classes'] == 1) {
$summary .= t('Add first and last classes to field-item div.');
}
else {
$summary .= t('Do not add first and last classes into field-item div.');
}
if (!empty($settings['field_multiple_classes']) && $settings['field_multiple_classes'] == 1) {
$summary .= '<br />' . t('Add last class every @n item', array(
'@n' => $settings['field_multiple_classes_every'],
));
}
}
}
/**
* Implements hook_field_formatter_settings_form_alter().
*/
function field_multiple_classes_field_formatter_settings_form_alter(&$settings_form, $context) {
if ($context['field']['cardinality'] > 1 || $context['field']['cardinality'] == FIELD_CARDINALITY_UNLIMITED) {
$settings = $context['instance']['display'][$context['view_mode']]['settings'];
$settings_form['field_multiple_classes'] = array(
'#type' => 'checkbox',
'#title' => t('Add first and last class to field-item div'),
'#default_value' => $settings['field_multiple_classes'],
);
$settings_form['field_multiple_classes_every'] = array(
'#type' => 'select',
'#title' => t('Add last class every n item'),
'#options' => drupal_map_assoc(range(2, 10)),
'#default_value' => $settings['field_multiple_classes_every'],
);
}
}
/**
* Implements hook_preprocess_field().
*
* @todo make $delimiter available as a template variable
* combine with count($items) to determine if multivalue
* provide a new field.tpl.php ?
*/
function field_multiple_classes_preprocess_field(&$variables, $hook) {
$count = count($variables['items']);
if (!isset($variables['items'][0]['#display_settings']['field_multiple_classes'])) {
return;
}
$multiple_classes_enabled = $variables['items'][0]['#display_settings']['field_multiple_classes'];
if ($multiple_classes_enabled == 0 || $count < 2) {
return;
}
$every = $multiple_classes_enabled = $variables['items'][0]['#display_settings']['field_multiple_classes_every'];
$start = 1;
foreach ($variables['items'] as $delta => $item) {
if ($start == 1) {
$variables['item_multiple_extra_class_array'][$delta] = 'first';
}
else {
if ($start == $every) {
$variables['item_multiple_extra_class_array'][$delta] = 'last';
$start = 0;
}
}
$start++;
}
}
/**
* Implements hook_theme_registry_alter();
*/
function field_multiple_classes_theme_registry_alter(&$theme_registry) {
$theme_registry['field']['function'] = 'theme_field_multiple_classes';
}
function theme_field_multiple_classes($variables) {
if (count($variables['items']) < 2) {
return theme_field($variables);
}
$output = '';
// Render the label, if it's not hidden.
if (!$variables['label_hidden']) {
$output .= '<div class="field-label"' . $variables['title_attributes'] . '>' . $variables['label'] . ': </div>';
}
// Render the items.
$output .= '<div class="field-items"' . $variables['content_attributes'] . '>';
foreach ($variables['items'] as $delta => $item) {
$classes = array();
$classes[] = 'field-item';
if (isset($variables['item_multiple_extra_class_array'][$delta])) {
$classes[] = $variables['item_multiple_extra_class_array'][$delta];
}
$classes[] = $delta % 2 ? 'odd' : 'even';
$output .= '<div class="' . implode(' ', $classes) . '"' . $variables['item_attributes'][$delta] . '>' . drupal_render($item) . '</div>';
}
$output .= '</div>';
// Render the top-level DIV.
$output = '<div class="' . $variables['classes'] . '"' . $variables['attributes'] . '>' . $output . '</div>';
return $output;
}
Functions
Name![]() |
Description |
---|---|
field_multiple_classes_field_formatter_info_alter | Implements hook_field_formatter_info_alter(). |
field_multiple_classes_field_formatter_settings_form_alter | Implements hook_field_formatter_settings_form_alter(). |
field_multiple_classes_field_formatter_settings_summary_alter | Implements hook_field_formatter_settings_summary_alter(). |
field_multiple_classes_preprocess_field | Implements hook_preprocess_field(). |
field_multiple_classes_theme_registry_alter | Implements hook_theme_registry_alter(); |
theme_field_multiple_classes |