danielebarchiesi@2:
danielebarchiesi@2: */
danielebarchiesi@2:
danielebarchiesi@2: /**
danielebarchiesi@2: * Implements hook_field_formatter_info().
danielebarchiesi@2: *
danielebarchiesi@2: * Adds the flexslider format option within the manage display form of
danielebarchiesi@2: * of an image field.
danielebarchiesi@2: */
danielebarchiesi@2: function flexslider_fields_field_formatter_info() {
danielebarchiesi@2: return array(
danielebarchiesi@2: 'flexslider' => array(
danielebarchiesi@2: 'label' => t('flexslider'),
danielebarchiesi@2: 'field types' => array('image', 'media'),
danielebarchiesi@2: 'settings' => array(
danielebarchiesi@2: 'optionset' => 'default',
danielebarchiesi@2: 'caption' => FALSE,
danielebarchiesi@2: ),
danielebarchiesi@2: ),
danielebarchiesi@2: );
danielebarchiesi@2: }
danielebarchiesi@2:
danielebarchiesi@2: /**
danielebarchiesi@2: * Implements hook_field_formatter_settings_form().
danielebarchiesi@2: *
danielebarchiesi@2: * Provides display settings form within the manage display page of
danielebarchiesi@2: * an image field with formatter flexslider.
danielebarchiesi@2: */
danielebarchiesi@2: function flexslider_fields_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
danielebarchiesi@2: $display = $instance['display'][$view_mode];
danielebarchiesi@2: $settings = $display['settings'];
danielebarchiesi@2:
danielebarchiesi@2: $form = array();
danielebarchiesi@2:
danielebarchiesi@2: // Show select box for the option set
danielebarchiesi@2: $optionsets = array();
danielebarchiesi@2: ctools_include('export');
danielebarchiesi@2: foreach (flexslider_optionset_load_all() as $name => $optionset) {
danielebarchiesi@2: $optionsets[$name] = check_plain($optionset->title);
danielebarchiesi@2: }
danielebarchiesi@2:
danielebarchiesi@2: $form['optionset'] = array(
danielebarchiesi@2: '#title' => t('Option set'),
danielebarchiesi@2: '#type' => 'select',
danielebarchiesi@2: '#options' => $optionsets,
danielebarchiesi@2: '#default_value' => $settings['optionset'],
danielebarchiesi@2: );
danielebarchiesi@2:
danielebarchiesi@2: // If the image field doesn't have the Title field enabled, tell the user.
danielebarchiesi@2: if ($instance['settings']['title_field'] == FALSE) {
danielebarchiesi@2: $form['caption'] = array(
danielebarchiesi@2: '#title' => t('Use image title as the caption'),
danielebarchiesi@2: '#type' => 'checkbox',
danielebarchiesi@2: '#disabled' => TRUE,
danielebarchiesi@2: '#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'))))),
danielebarchiesi@2: );
danielebarchiesi@2: }
danielebarchiesi@2: else {
danielebarchiesi@2: $form['caption'] = array(
danielebarchiesi@2: '#title' => t('Use image title as the caption'),
danielebarchiesi@2: '#type' => 'checkbox',
danielebarchiesi@2: '#default_value' => $settings['caption'],
danielebarchiesi@2: );
danielebarchiesi@2: }
danielebarchiesi@2:
danielebarchiesi@2: return $form;
danielebarchiesi@2: }
danielebarchiesi@2:
danielebarchiesi@2: /**
danielebarchiesi@2: * Implements hook_field_formatter_settings_summary().
danielebarchiesi@2: *
danielebarchiesi@2: * Displays the summary of the set options of a flexslider formatted image field
danielebarchiesi@2: */
danielebarchiesi@2: function flexslider_fields_field_formatter_settings_summary($field, $instance, $view_mode) {
danielebarchiesi@2: $display = $instance['display'][$view_mode];
danielebarchiesi@2: $settings = $display['settings'];
danielebarchiesi@2:
danielebarchiesi@2: $summary = array();
danielebarchiesi@2:
danielebarchiesi@2: // Load option set
danielebarchiesi@2: ctools_include('export');
danielebarchiesi@2: if (!empty($settings['optionset'])) {
danielebarchiesi@2: $o = flexslider_optionset_load($settings['optionset']);
danielebarchiesi@2: if ($o !== NULL) {
danielebarchiesi@2: $optionset = $o;
danielebarchiesi@2: }
danielebarchiesi@2: }
danielebarchiesi@2:
danielebarchiesi@2: // Build settings summary
danielebarchiesi@2: $optionset = isset($optionset) ? $optionset->title : t('Default settings');
danielebarchiesi@2: $summary[] = t('Option set: %optionset', array('%optionset' => $optionset));
danielebarchiesi@2:
danielebarchiesi@2: return implode('
', $summary);
danielebarchiesi@2: }
danielebarchiesi@2:
danielebarchiesi@2: /**
danielebarchiesi@2: * Implements hook_field_formatter_view().
danielebarchiesi@2: *
danielebarchiesi@2: * Prepares a renderable array of images and adds the neccessary JS and CSS
danielebarchiesi@2: */
danielebarchiesi@2: function flexslider_fields_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
danielebarchiesi@2: if ($field['type'] == 'media') {
danielebarchiesi@2: $image_items = array();
danielebarchiesi@2: foreach ($items as $item) {
danielebarchiesi@2: if ($item['file']->type == 'image') {
danielebarchiesi@2: $file = (array) $item['file'];
danielebarchiesi@2: $file += array('alt' => '', 'title' => '');
danielebarchiesi@2: $image_items[] = $file;
danielebarchiesi@2: }
danielebarchiesi@2: }
danielebarchiesi@2: $items = $image_items;
danielebarchiesi@2: }
danielebarchiesi@2:
danielebarchiesi@2: $element = array();
danielebarchiesi@2: if (count($items) > 0) {
danielebarchiesi@2: $element[] = array(
danielebarchiesi@2: '#theme' => 'flexslider',
danielebarchiesi@2: '#items' => $items,
danielebarchiesi@2: '#settings' => $display['settings'],
danielebarchiesi@2: );
danielebarchiesi@2: }
danielebarchiesi@2:
danielebarchiesi@2: return $element;
danielebarchiesi@2: }