You are here

flexslider_field_collection.module in FlexSlider Field Collection 7

Provides a Flex Slider formatter for Field Collection fields.

File

flexslider_field_collection.module
View source
<?php

/**
 * @file
 * Provides a Flex Slider formatter for Field Collection fields.
 */

/**
 * Implements hook_field_formatter_info().
 */
function flexslider_field_collection_field_formatter_info() {
  return array(
    'field_collection_entity_flexslider' => array(
      'label' => t('FlexSlider'),
      'description' => t('Displays the rendered entities in a FlexSlider.'),
      'field types' => array(
        'field_collection',
      ),
      'settings' => array(
        'optionset' => '',
        'view_mode' => '',
      ),
    ),
  );
}

/**
 * Implements hook_field_formatter_settings_form().
 */
function flexslider_field_collection_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
  $display = $instance['display'][$view_mode];
  $settings = $display['settings'];
  $form = array();

  // Creates a select list for the Flex Slider option set.
  $optionsets = array();
  ctools_include('export');
  foreach (flexslider_optionset_load_all() as $name => $optionset) {
    $optionsets[$name] = $optionset->title;
  }
  $form['optionset'] = array(
    '#title' => t('Option set'),
    '#type' => 'select',
    '#options' => $optionsets,
    '#default_value' => $settings['optionset'],
  );

  // Creates a select list for the slide view modes.
  $entity_info = entity_get_info('field_collection_item');
  $options = array();
  if (!empty($entity_info['view modes'])) {
    foreach ($entity_info['view modes'] as $view_mode => $view_mode_settings) {
      $options[$view_mode] = $view_mode_settings['label'];
    }
  }
  if (count($options) > 1) {
    $form['view_mode'] = array(
      '#type' => 'select',
      '#options' => $options,
      '#title' => t('Slide view mode'),
      '#default_value' => $settings['view_mode'],
    );
  }
  return $form;
}

/**
 * Implements hook_field_formatter_settings_summary().
 */
function flexslider_field_collection_field_formatter_settings_summary($field, $instance, $view_mode) {
  $display = $instance['display'][$view_mode];
  $settings = $display['settings'];
  $summary = array();

  // Load the Flex Slider option set.
  ctools_include('export');
  if (!empty($settings['optionset'])) {
    $optionset = flexslider_optionset_load($settings['optionset']);
  }

  // Build the settings summary.
  $optionset = isset($optionset) ? $optionset->title : t('Default settings');
  $summary[] = t('Option set: %optionset', array(
    '%optionset' => $optionset,
  ));
  $entity_info = entity_get_info('field_collection_item');
  $summary[] = t('Slides rendered as @mode', array(
    '@mode' => isset($entity_info['view modes'][$settings['view_mode']]['label']) ? $entity_info['view modes'][$settings['view_mode']]['label'] : 'default',
  ));
  return implode('<br />', $summary);
}

/**
 * Implements hook_field_formatter_view().
 */
function flexslider_field_collection_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $settings = $display['settings'];
  $result = array();
  if ($display['type'] == 'field_collection_entity_flexslider') {
    $view_mode = !empty($display['settings']['view_mode']) ? $display['settings']['view_mode'] : 'full';
    foreach ($items as $delta => $item) {
      if ($field_collection = field_collection_field_get_entity($item)) {
        $renderable = $field_collection
          ->view($view_mode);
        $result[$delta] = array(
          'slide' => drupal_render($renderable),
          'item' => $field_collection,
        );
      }
    }
  }
  $element = array();
  if (count($result) > 0) {
    $element[] = array(
      '#theme' => 'flexslider',
      '#items' => $result,
      '#settings' => $display['settings'],
    );
  }
  return $element;
}