[
'variables' => ['items' => NULL, 'settings' => NULL],
],
'carousel_views' => [
'variables' => [],
],
];
}
/**
* Theme for carousel
*/
function template_preprocess_carousel(&$variables) {
$items = $variables['items'];
$settings = _carousel_format_settings($variables['settings']);
$variables['attributes']['class'][] = 'owl-slider-field';
$variables['attributes']['class'][] = 'owl-slider-wrapper';
$variables['attributes']['class'][] = 'owl-carousel';
$variables['attributes']['data-settings'] = json_encode($settings);
$html = '';
if (!empty($items)) {
$i = 0;
foreach ($items as $item) {
$html .= '
' . \Drupal::service('renderer')->render($item) . '
';
$i++;
}
}
$ouput = array(
'#type' => 'markup',
'#markup' => $html,
);
$variables['output'] = \Drupal::service('renderer')->render($ouput);
}
/**
* Prepares variables for Views Carousel templates.
*
* Default template: carousel-views.html.twig.
*
* @param array $variables
* An associative array containing:
* - view: A View object.
*/
function template_preprocess_carousel_views(&$variables) {
$handler = $variables['view']->style_plugin;
$settings = _carousel_format_settings($handler->options);
$variables['attributes']['data-settings'] = json_encode($settings);
$variables['attributes']['class'][] = 'owl-slider-wrapper';
$variables['attributes']['class'][] = 'owl-carousel';
$variables['items'] = $settings['items'];
$items = $variables['items'];
if (!empty($items)) {
$itm = 1;
if ($items > $itm){
$variables['attributes']['class'][] = 'owl-responsive';
}
}
$attached = array(
'#attached' => array('library' => array('carousel/owl-carousel'))
);
\Drupal::service('renderer')->render($attached);
template_preprocess_views_view_unformatted($variables);
}
/**
* Default settings for carousel
*/
function _carousel_default_settings($key = NULL) {
$settings = array(
'image_style' => '',
'image_link' => '',
'items' => 1,
'margin' => 30,
'autoplay' => FALSE,
'autoplaySpeed' => 1000,
'autoplayHoverPause' => FALSE,
'autoplayTimeout' => 4000,
'nav' => TRUE,
'navSpeed' => 800,
'loop' => TRUE,
'navRewind' => FALSE,
'rewindSpeed' => 1000,
'dots' => FALSE,
'dotsSpeed' => 800,
'slideBy' => 1,
'mouseDrag' => TRUE,
'touchDrag' => TRUE,
'pullDrag' => FALSE,
'freeDrag' => FALSE,
'stagePadding' => '',
'merge' => FALSE,
'mergeFit' => FALSE,
'center' => FALSE,
'autoWidth' => FALSE,
'video' => FALSE,
'videoHeight' => '',
'videoWidth' => '',
);
return isset($settings[$key]) ? $settings[$key] : $settings;
}
/**
* return formatted js array of settings
*/
function _carousel_format_settings($settings) {
$settings['items'] = (int) $settings['items'];
$settings['margin'] = (int) $settings['margin'];
$settings['autoplay'] = (bool) $settings['autoplay'];
$settings['autoplaySpeed'] = (int) $settings['autoplaySpeed'];
$settings['autoplayHoverPause'] = (bool) $settings['autoplayHoverPause'];
$settings['autoplayTimeout'] = (int) $settings['autoplayTimeout'];
$settings['nav'] = (bool) $settings['nav'];
$settings['navSpeed'] = (int) $settings['navSpeed'];
$settings['loop'] = (bool) $settings['loop'];
$settings['navRewind'] = (bool) $settings['navRewind'];
$settings['rewindSpeed'] = (int) $settings['rewindSpeed'];
$settings['dots'] = (bool) $settings['dots'];
$settings['dotsSpeed'] = (int) $settings['dotsSpeed'];
$settings['slideBy'] = (int) $settings['slideBy'];
$settings['mouseDrag'] = (bool) $settings['mouseDrag'];
$settings['touchDrag'] = (bool) $settings['touchDrag'];
$settings['pullDrag'] = (bool) $settings['pullDrag'];
$settings['freeDrag'] = (bool) $settings['freeDrag'];
$settings['stagePadding'] = (int) $settings['stagePadding'];
$settings['merge'] = (bool) $settings['merge'];
$settings['mergeFit'] = (bool) $settings['mergeFit'];
$settings['center'] = (bool) $settings['center'];
$settings['autoWidth'] = (bool) $settings['autoWidth'];
$settings['video'] = (bool) $settings['video'];
$settings['videoHeight'] = (int) $settings['videoHeight'];
$settings['videoWidth'] = (int) $settings['videoWidth'];
if (isset($settings['image_style'])) {
unset($settings['image_style']);
}
if (isset($settings['image_link'])) {
unset($settings['image_link']);
}
return $settings;
}
/**
* Convert a string of settings to array.
* @param $str
* @return string
*/
function _carousel_string_to_array($str) {
$str = trim($str);
$str = str_replace('[', '', $str);
$str = str_replace(']', '', $str);
$str = explode(',', $str);
return $str;
}