flexslider_fields.module in Flex Slider 7.2
Same filename and directory in other branches
Adds fields integration with FlexSlider
@author jepedo @author Mathew Winstone <mwinstone@coldfrontlabs.ca>
File
flexslider_fields/flexslider_fields.moduleView source
<?php
/**
* @file
* Adds fields integration with FlexSlider
*
* @author jepedo
* @author Mathew Winstone <mwinstone@coldfrontlabs.ca>
*/
/**
* 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() {
$info = array(
'flexslider' => array(
'label' => t('flexslider'),
'field types' => array(
'image',
'media',
),
'settings' => array(
'optionset' => 'default',
'image_style' => '',
'caption' => FALSE,
),
),
);
// Integrate with file entity / media.
if (module_exists('file_entity')) {
$info['flexslider_file_entity'] = array(
'label' => t('FlexSlider File Entity'),
'description' => t('Render files in a specific view mode.'),
'field types' => array(
'image',
'media',
'file',
),
'settings' => array(
'optionset' => 'default',
'file_view_mode' => 'default',
'caption' => FALSE,
),
);
}
return $info;
}
/**
* 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'],
);
if ($display['type'] == 'flexslider') {
$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,
);
}
elseif ($display['type'] == 'flexslider_file_entity') {
$form['file_view_mode'] = array(
'#title' => t('File view mode'),
'#type' => 'select',
'#default_value' => $settings['file_view_mode'],
'#options' => file_entity_view_mode_labels(),
);
}
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('Choose a caption source'),
'#type' => 'select',
'#disabled' => TRUE,
'#options' => array(
0 => t('None'),
1 => t('Image title'),
'alt' => t('Image ALT attribute'),
),
'#description' => t('You need to <a href="@url">enable the Title field</a> 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('Choose a caption source'),
'#type' => 'select',
'#options' => array(
0 => t('None'),
1 => t('Image title'),
'alt' => t('Image ALT attribute'),
),
'#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 ($instance['display'][$view_mode]['type'] == 'flexslider') {
if (!empty($settings['image_style'])) {
$is = t('Image style: %imagestyle', array(
'%imagestyle' => $settings['image_style'],
));
}
else {
$is = t('Image style: None (original image)');
}
}
elseif ($instance['display'][$view_mode]['type'] == 'flexslider_file_entity') {
if (!empty($settings['file_view_mode'])) {
$is = t('File view mode: %file_view_mode', array(
'%file_view_mode' => file_entity_view_mode_label($settings['file_view_mode']),
));
}
else {
$is = t('File view mode: Default');
}
}
// Build settings summary.
$optionset = isset($optionset) ? $optionset->title : t('Default settings');
$summary[] = t('Option set: %optionset', array(
'%optionset' => $optionset,
));
$summary[] = $is;
return implode('<br />', $summary);
}
/**
* Implements hook_field_formatter_view().
*
* Prepares a renderable array of images and adds the necessary JS and CSS.
*/
function flexslider_fields_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
// If file entity formatter is selected render all files initially.
if ($display['type'] == 'flexslider_file_entity') {
$file_display = $display;
$file_display['type'] = 'file_rendered';
$file_items = module_invoke('file_entity', 'field_formatter_view', $entity_type, $entity, $field, $instance, $langcode, $items, $file_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 ($display['type'] == 'flexslider') {
// If no 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']);
}
}
elseif ($display['type'] == 'flexslider_file_entity') {
$item['slide'] = render($file_items[$key]);
}
// Check caption settings.
if ($display['settings']['caption'] === '1') {
$item['caption'] = filter_xss($item['item']['title']);
}
elseif ($display['settings']['caption'] === 'alt') {
$item['caption'] = filter_xss($item['item']['alt']);
}
$items[$key] = $item;
}
$element[0] = array(
'#theme' => 'flexslider',
'#items' => $items,
'#settings' => $display['settings'],
);
}
return $element;
}
Functions
Name![]() |
Description |
---|---|
flexslider_fields_field_formatter_info | Implements hook_field_formatter_info(). |
flexslider_fields_field_formatter_settings_form | Implements hook_field_formatter_settings_form(). |
flexslider_fields_field_formatter_settings_summary | Implements hook_field_formatter_settings_summary(). |
flexslider_fields_field_formatter_view | Implements hook_field_formatter_view(). |