function resp_img_field_attach_view_alter in Responsive images and styles 7.2
Same name and namespace in other branches
- 8 resp_img.module \resp_img_field_attach_view_alter()
Implements hook_preprocess_field().
File
- ./
resp_img.module, line 254
Code
function resp_img_field_attach_view_alter(&$output, $context) {
$view = module_exists('views') ? views_get_current_view() : FALSE;
foreach (element_children($output) as $field_name) {
$element =& $output[$field_name];
$vars = array();
if (isset($element['#formatter'])) {
if ($element['#formatter'] == 'image') {
$vars['image_style'] = 'image_style';
$vars['#formatter'] = 'picture';
$vars['#theme'] = 'picture_formatter';
}
elseif ($element['#formatter'] == 'colorbox') {
$vars['image_style'] = 'colorbox_node_style';
$vars['#formatter'] = 'picture';
$vars['#theme'] = 'colorbox_picture_formatter';
}
elseif ($element['#formatter'] == 'slideshow') {
$vars['image_style'] = 'slideshow_image_style';
$vars['#formatter'] = 'slideshow';
$vars['#theme'] = 'field_slideshow';
}
if (!empty($vars)) {
$instance = field_info_instance($element['#entity_type'], $element['#field_name'], $element['#bundle']);
if ($view && isset($view->query->pager->display->handler->handlers['field'][$element['#field_name']])) {
$settings = $view->query->pager->display->handler->handlers['field'][$element['#field_name']]->options['settings'];
}
elseif (isset($instance['display'][$context['view_mode']]['settings'][$vars['image_style']]) && !empty($instance['display'][$context['view_mode']]['settings'][$vars['image_style']])) {
$settings = $instance['display'][$context['view_mode']]['settings'];
}
else {
$settings = $instance['display']['default']['settings'];
}
if (isset($settings[$vars['image_style']]) && strpos($settings[$vars['image_style']], RESP_IMG_STYLE_PREFIX) !== FALSE) {
$group_name = drupal_substr($settings[$vars['image_style']], drupal_strlen(RESP_IMG_STYLE_PREFIX));
$breakpoint_styles = _resp_img_get_breakpoint_styles($group_name);
if (!empty($breakpoint_styles)) {
// Change the formatter so it uses ours.
$element['#formatter'] = $vars['#formatter'];
// Change the formatter on all items as well.
$num_fields = $element['#formatter'] != 'slideshow' ? count($element['#items']) : 1;
for ($delta = 0; $delta < $num_fields; $delta++) {
$element[$delta]['#theme'] = $vars['#theme'];
// Change the image style to the first in use.
$reset = reset($breakpoint_styles['mapping']);
$element[$delta]['#image_style'] = reset($reset);
$element[$delta]['#breakpoints'] = $breakpoint_styles;
}
}
else {
watchdog('Responsive images', 'You have to map at least 1 style for ' . check_plain($group_name) . '.');
}
}
}
}
}
}