*/ /** * Implements hook_field_formatter_info(). * * Adds the flexslider format option within the manage display form of * of an image field. */ function flexslider_fields_field_formatter_info() { return array( 'flexslider' => array( 'label' => t('flexslider'), 'field types' => array('image', 'media'), 'settings' => array( 'optionset' => 'default', 'image_style' => '', 'caption' => FALSE, ), ), ); } /** * Implements hook_field_formatter_settings_form(). * * Provides display settings form within the manage display page of * an image field with formatter flexslider. */ function flexslider_fields_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) { $display = $instance['display'][$view_mode]; $settings = $display['settings']; $form = array(); // Show select box for the option set $optionsets = array(); ctools_include('export'); foreach (flexslider_optionset_load_all() as $name => $optionset) { $optionsets[$name] = check_plain($optionset->title); } $form['optionset'] = array( '#title' => t('Option set'), '#type' => 'select', '#options' => $optionsets, '#default_value' => $settings['optionset'], ); $image_styles = image_style_options(FALSE, PASS_THROUGH); $form['image_style'] = array( '#title' => t('Image style'), '#type' => 'select', '#default_value' => $settings['image_style'], '#empty_option' => t('None (original image)'), '#options' => $image_styles, ); if (!empty($instance['settings'])) { // If the image field doesn't have the Title field enabled, tell the user. if ($instance['settings']['title_field'] == FALSE and $instance['bundle'] != 'ctools') { $form['caption'] = array( '#title' => t('Use image title as the caption'), '#type' => 'checkbox', '#disabled' => TRUE, '#description' => t('You need to enable the Title field for this image field to be able use it as a caption.', array('@url' => url('admin/structure/types/manage/' . $instance['bundle'] . '/fields/' . $instance['field_name'], array('fragment' => 'edit-instance-settings-title-field', 'query' => array('destination' => 'admin/structure/types/manage/' . $instance['bundle'] . '/display'))))), ); } else { $form['caption'] = array( '#title' => t('Use image title as the caption'), '#type' => 'checkbox', '#default_value' => $settings['caption'], ); } } return $form; } /** * Implements hook_field_formatter_settings_summary(). * * Displays the summary of the set options of a flexslider formatted image field */ function flexslider_fields_field_formatter_settings_summary($field, $instance, $view_mode) { $display = $instance['display'][$view_mode]; $settings = $display['settings']; $summary = array(); // Load option set ctools_include('export'); if (!empty($settings['optionset'])) { $o = flexslider_optionset_load($settings['optionset']); if ($o !== NULL) { $optionset = $o; } } // Display the selected image style if (!empty($settings['image_style'])) { $is = t('Image style: %imagestyle', array('%imagestyle' => $settings['image_style'])); } else { $is = t('Image style: None (original image)'); } // Build settings summary $optionset = isset($optionset) ? $optionset->title : t('Default settings'); $summary[] = t('Option set: %optionset', array('%optionset' => $optionset)); $summary[] = $is; return implode('
', $summary); } /** * Implements hook_field_formatter_view(). * * Prepares a renderable array of images and adds the neccessary JS and CSS */ function flexslider_fields_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) { $element = array(); if (count($items) > 0) { foreach ($items as $key => $item) { if(isset($item['item'])) continue; $tmp = $item; $item = array(); $item['item'] = $tmp; // Setup the variables for calling theme_image_style if (isset($item['item']['uri'])) { $item['slide']['path'] = $item['item']['uri']; } if (isset($display['settings']['image_style'])) { $item['slide']['style_name'] = $display['settings']['image_style']; } if (isset($item['item']['width'])) { $item['slide']['width'] = $item['item']['width']; } if (isset($item['item']['height'])) { $item['slide']['height'] = $item['item']['height']; } if (isset($item['item']['alt'])) { $item['slide']['alt'] = $item['item']['alt']; } if (isset($item['item']['title'])) { $item['slide']['title'] = $item['item']['title']; } // Render the slide item // If not style set, we have to call theme_image since theme_image_style // doesn't auto-fallback to full size image if (!empty($item['slide']['style_name'])) { // Generate the HTML for the slide $item['slide'] = theme('image_style', $item['slide']); } else { // Generate the HTML for the slide $item['slide'] = theme('image', $item['slide']); } // Check caption settings if ($display['settings']['caption']) { $item['caption'] = filter_xss($item['item']['title']); } $items[$key] = $item; } $element = array( '#theme' => 'flexslider', '#items' => $items, '#settings' => $display['settings'], ); } return $element; }