royalslider.theme.inc in RoyalSlider Integration 7
Theme functions for RoyalSlider.
File
theme/royalslider.theme.incView source
<?php
/**
* @file
* Theme functions for RoyalSlider.
*/
/**
* Implements hook_preprocess_HOOK().
*
* Preprocess variables for the RoyalSlider template.
*/
function royalslider_preprocess_royalslider(&$variables) {
// Load optionset.
if ($optionset = royalslider_optionset_load($variables['optionset'])) {
$variables['settings'] = $optionset->options;
// Add wrapper attributes.
$variables['attributes_array']['class'][] = 'royalSlider';
$variables['attributes_array']['id'] = $variables['royalslider_id'];
// Setup skin & fallback to default.
$skin = !empty($variables['skin']) ? $variables['skin'] : $optionset->skin;
$skins = royalslider_skins();
$skin_class = isset($skins[$skin]['class']) ? $skins[$skin]['class'] : $skins['default']['class'];
$variables['attributes_array']['class'][] = $skin_class;
// @TODO figure out if we can calculate the largest image size and use it
// as a base for automatically setting the slider size.
// Now prepare items for rendering.
$items_processed = array();
foreach ($variables['items'] as $item) {
$items_processed[] = array(
'#theme' => 'royalslider_item',
'#royalslider_id' => $variables['royalslider_id'],
'#optionset' => $optionset,
'#item' => $item,
);
}
$variables['items_processed'] = $items_processed;
// The attributes_array is overridden by ctools see issue #2645612.
// This workaround copies them to the classes_array to mitigate the issue
// that the skin is missing and the royalSlider class has a lowercase s.
// See #2793037 for more details.
$variables['classes_array'] = $variables['attributes_array']['class'];
if (!empty($items_processed)) {
// Add resources.
royalslider_add($variables['royalslider_id'], $optionset, $skin);
// We're done!
return;
}
}
}
/**
* Implements hook_preprocess_HOOK().
*
* Preprocess variables for the RoyalSlider Item template.
*/
function royalslider_preprocess_royalslider_item(&$variables) {
// Only set slider dimensions once.
static $slider_size_added = FALSE;
$optionset = $variables['optionset'];
$item = $variables['item'];
// Tag is defined by optionset, not individual item.
$variables['tag'] = $optionset->options['usePreloader'] ? 'a' : 'img';
$add_classes = array(
'rsImg',
);
$variables['classes_array'] = array_unique(array_merge($variables['classes_array'], $add_classes));
$attributes = array(
'class' => $variables['classes_array'],
);
if (!empty($item['alt'])) {
$attributes['alt'] = $item['alt'];
}
if (!empty($item['title'])) {
$attributes['title'] = $item['title'];
$variables['caption'] = $item['title'];
}
if (array_key_exists('row', $item)) {
$variables['row'] = $item['row'];
}
// Handle image and slider dimensions.
$manual_width = !empty($optionset->options['imgWidth']);
$manual_height = !empty($optionset->options['imgHeight']);
if ($optionset->options['drupalAutoSetImageDimensions'] || $manual_width || $manual_height) {
// Grab image dimensions.
if (empty($item['width']) || empty($item['height'])) {
$image_info = image_get_info($item['uri']);
$item['width'] = $image_info['width'];
$item['height'] = $image_info['height'];
}
$dimensions = array(
'width' => $item['width'],
'height' => $item['height'],
);
// Resize if we're using an image preset.
// @TODO: This should be skipped when item is part of a views_slideshow.
if (!empty($optionset->imagestyle_normal)) {
image_style_transform_dimensions($optionset->imagestyle_normal, $dimensions);
}
// Automatic image dimensions.
if ($optionset->options['drupalAutoSetImageDimensions']) {
$attributes['data-rsw'] = $dimensions['width'];
$attributes['data-rsh'] = $dimensions['height'];
}
else {
if ($manual_width || $manual_height) {
if ($manual_width) {
$attributes['data-rsw'] = $optionset->options['imgWidth'];
}
if ($manual_height) {
$attributes['data-rsh'] = $optionset->options['imgHeight'];
}
}
}
}
// Handle full-screen images.
if ($optionset->options['fullscreen']['enabled']) {
$image_style = $optionset->imagestyle_fullscreen;
$attributes['data-rsBigImg'] = !empty($image_style) ? _royalslider_image_style($image_style, $item['uri']) : file_create_url($item['uri']);
}
// Handle thumbnail images.
if ($optionset->options['controlNavigation'] === 'thumbnails') {
$image_style = $optionset->imagestyle_thumbnail;
$attributes['data-rsTmb'] = !empty($image_style) ? _royalslider_image_style($image_style, $item['uri']) : file_create_url($item['uri']);
}
// Set main image url.
$image_style = $optionset->imagestyle_normal;
$variables['url'] = !empty($image_style) ? _royalslider_image_style($image_style, $item['uri']) : file_create_url($item['uri']);
if (isset($item['path'])) {
$variables['path'] = $item['path'];
}
// Set slider dimensions.
if ($variables['optionset']->options['autoScaleSlider'] && !empty($dimensions)) {
// Only add them once.
if (!$slider_size_added) {
drupal_add_js(array(
'royalslider' => array(
'instances' => array(
$variables['royalslider_id'] => array(
'slider_height' => $dimensions['height'],
'slider_width' => $dimensions['width'],
),
),
),
), 'setting');
}
}
// Finally, set attributes.
$variables['attributes_array'] = $attributes;
}
/**
* Remote Stream Wrapper-aware helper function to apply Drupal image styles
* to image URIs.
*
* @param string
* The image style we want to apply.
* @param string
* The image's URI.
*
* @return string
* The image's path.
*/
function _royalslider_image_style($image_style, $uri) {
// Compatibility with Remote Stream Wrapper.
static $remote_stream_wrapper;
if (!isset($remote_stream_wrapper)) {
$remote_stream_wrapper = module_exists('remote_stream_wrapper');
}
if ($remote_stream_wrapper) {
$path = file_is_scheme_remote(file_uri_scheme($uri)) ? remote_stream_wrapper_image_style_path($image_style, $uri) : image_style_url($image_style, $uri);
}
else {
$path = image_style_url($image_style, $uri);
}
return $path;
}
Functions
Name | Description |
---|---|
royalslider_preprocess_royalslider | Implements hook_preprocess_HOOK(). |
royalslider_preprocess_royalslider_item | Implements hook_preprocess_HOOK(). |
_royalslider_image_style | Remote Stream Wrapper-aware helper function to apply Drupal image styles to image URIs. |