custom/plugins/zenitPlatformStratus/src/Resources/views/storefront/element/cms-element-zen-image-slider.html.twig line 1

Open in your IDE?
  1. {% block element_zen_image_slider %}
  2.     {% set sliderConfig = element.fieldConfig.elements %}
  3.     {% set customClasses = sliderConfig.customClasses.value %}
  4.     {% set elemStyles = { } %}
  5.     {% if sliderConfig.elementBorderRadius.value %}
  6.         {% set elemStyles = elemStyles|merge({ 'border-radius': sliderConfig.elementBorderRadiusTopLeft.value ~ ' ' ~ sliderConfig.elementBorderRadiusTopRight.value ~ ' ' ~ sliderConfig.elementBorderRadiusBottomRight.value ~ ' ' ~ sliderConfig.elementBorderRadiusBottomLeft.value }) %}
  7.     {% endif %}
  8.     <style>
  9.         {% if elemStyles %}
  10.         .cms-element-{{ element.type }}-{{ element.id }} .zen-image-slider {
  11.             {% for property, value in elemStyles %}
  12.                 {{ property }}: {{ value }};
  13.             {% endfor %}
  14.         }
  15.         {% endif %}
  16.     </style>
  17.     {% for config in element.data.sliderItems %}
  18.         {% set imageStyles = { } %}
  19.         {% if config.imageBorderRadius %}
  20.             {% set imageStyles = imageStyles|merge({ 'border-radius': config.imageBorderRadiusTopLeft ~ ' ' ~ config.imageBorderRadiusTopRight ~ ' ' ~ config.imageBorderRadiusBottomRight ~ ' ' ~ config.imageBorderRadiusBottomLeft }) %}
  21.         {% endif %}
  22.         {% if config.overlay %}
  23.             {% set overlayStyles = {
  24.                 'background-color': (config.overlayColor ?: 'transparent'),
  25.                 'opacity': (config.overlayOpacity ?: '0%'),
  26.             } %}
  27.             {% if config.imageBorderRadius %}
  28.                 {% set overlayStyles = overlayStyles|merge({ 'border-radius': config.imageBorderRadiusTopLeft ~ ' ' ~ config.imageBorderRadiusTopRight ~ ' ' ~ config.imageBorderRadiusBottomRight ~ ' ' ~ config.imageBorderRadiusBottomLeft }) %}
  29.             {% endif %}
  30.         {% endif %}
  31.         {% set textContainerStyles = {
  32.             'align-items': (config.verticalTextAlign ?: 'flex-start'),
  33.             'justify-content': (config.horizontalTextAlign ?: 'flex-start'),
  34.         } %}
  35.         {% set textStyles = { } %}
  36.         {% if config.textBorderRadius %}
  37.             {% set textStyles = textStyles|merge({ 'border-radius': config.textBorderRadiusTopLeft ~ ' ' ~ config.textBorderRadiusTopRight ~ ' ' ~ config.textBorderRadiusBottomRight ~ ' ' ~ config.textBorderRadiusBottomLeft }) %}
  38.         {% endif %}
  39.         {% if config.textPaddings %}
  40.             {% set textStyles = textStyles|merge({ 'padding': config.textPaddingTop ~ ' ' ~ config.textPaddingRight ~ ' ' ~ config.textPaddingBottom ~ ' ' ~ config.textPaddingLeft }) %}
  41.         {% endif %}
  42.         {% if config.textMargins %}
  43.             {% set textStyles = textStyles|merge({ 'margin': config.textMarginTop ~ ' ' ~ config.textMarginRight ~ ' ' ~ config.textMarginBottom ~ ' ' ~ config.textMarginLeft }) %}
  44.         {% endif %}
  45.         {% if config.color %}
  46.             {% set textStyles = textStyles|merge({ 'color': config.color }) %}
  47.         {% endif %}
  48.         {% if config.backgroundColor %}
  49.             {% set textStyles = textStyles|merge({ 'background-color': config.backgroundColor }) %}
  50.         {% endif %}
  51.         {% if config.textMinWidth %}
  52.             {% set textStyles = textStyles|merge({ 'width': config.textMinWidth }) %}
  53.         {% endif %}
  54.         {% if config.textMaxWidth %}
  55.             {% set textStyles = textStyles|merge({ 'max-width': config.textMaxWidth }) %}
  56.         {% endif %}
  57.         <style>
  58.             {% if overlayStyles %}
  59.             .cms-element-{{ element.type }}-{{ element.id }} .zen-slider-item-{{ loop.index }} .zen-image-slider-item-overlay {
  60.                 {% for property, value in overlayStyles %}
  61.                     {{ property }}: {{ value }};
  62.                 {% endfor %}
  63.             }
  64.             {% endif %}
  65.             {% if textContainerStyles %}
  66.             .cms-element-{{ element.type }}-{{ element.id }} .zen-slider-item-{{ loop.index }} .zen-image-slider-item-text-container {
  67.                 {% for property, value in textContainerStyles %}
  68.                     {{ property }}: {{ value }};
  69.                 {% endfor %}
  70.             }
  71.             {% endif %}
  72.             {% if imageStyles %}
  73.             .cms-element-{{ element.type }}-{{ element.id }} .zen-slider-item-{{ loop.index }} .image-slider-image {
  74.                 {% for property, value in imageStyles %}
  75.                     {{ property }}: {{ value }};
  76.                 {% endfor %}
  77.             }
  78.             {% endif %}
  79.             {% if textStyles %}
  80.             .cms-element-{{ element.type }}-{{ element.id }} .zen-slider-item-{{ loop.index }} .zen-image-slider-item-text {
  81.                 {% for property, value in textStyles %}
  82.                     {{ property }}: {{ value }};
  83.                 {% endfor %}
  84.             }
  85.             {% endif %}
  86.         </style>
  87.     {% endfor %}
  88.     <div class="cms-element-{{ element.type }} cms-element-{{ element.type }}-{{ element.id }}{% if sliderConfig.displayMode.value == "standard" and sliderConfig.verticalAlign.value %} has-vertical-alignment{% endif %} {{ customClasses }}">
  89.         {% set baseSliderOptions = {
  90.             slider: {
  91.                 navPosition: 'bottom',
  92.                 nav: sliderConfig.navigationDots.value ? true : false,
  93.                 controls: sliderConfig.navigationArrows.value ? true : false,
  94.                 autoHeight: (sliderConfig.displayMode.value == "standard") ? true : false,
  95.                 autoplay: sliderConfig.autoplay.value ? true : false,
  96.                 autoplayTimeout: sliderConfig.autoplayTimeout.value ? sliderConfig.autoplayTimeout.value : 5000,
  97.                 autoplayHoverPause: sliderConfig.autoplayHoverPause.value ? true : false,
  98.                 speed: sliderConfig.speed.value ? sliderConfig.speed.value : 500,
  99.                 autoplayButtonOutput: false,
  100.                 mode: sliderConfig.mode.value ? sliderConfig.mode.value : 'carousel',
  101.                 axis: sliderConfig.axis.value ? sliderConfig.axis.value : 'horizontal',
  102.                 animateDelay: 500,
  103.                 gutter: sliderConfig.items.value > 1 ? sliderConfig.gutter.value : 0
  104.             }
  105.         } %}
  106.         {% if sliderConfig.items.value > 1 %}
  107.             {% set baseSliderOptions = baseSliderOptions|replace_recursive({
  108.                 slider: {
  109.                     responsive: {
  110.                         xs: {
  111.                             "items": 1
  112.                         },
  113.                         sm: {
  114.                             "items": 1
  115.                         },
  116.                         md: {
  117.                             "items": sliderConfig.items.value
  118.                         },
  119.                         lg: {
  120.                             "items": sliderConfig.items.value
  121.                         },
  122.                         xl: {
  123.                             "items": sliderConfig.items.value
  124.                         }
  125.                     },
  126.                 }
  127.             }) %}
  128.         {% elseif sliderConfig.items.value > 2 %}
  129.             {% set baseSliderOptions = baseSliderOptions|replace_recursive({
  130.                 slider: {
  131.                     responsive: {
  132.                         xs: {
  133.                             "items": 1
  134.                         },
  135.                         sm: {
  136.                             "items": 1
  137.                         },
  138.                         md: {
  139.                             "items": sliderConfig.items.value - 1
  140.                         },
  141.                         lg: {
  142.                             "items": sliderConfig.items.value
  143.                         },
  144.                         xl: {
  145.                             "items": sliderConfig.items.value
  146.                         }
  147.                     },
  148.                 }
  149.             }) %}
  150.         {% endif %}
  151.         {% block element_zen_image_slider_alignment %}
  152.             {% if sliderConfig.verticalAlign.value %}
  153.                 <div class="cms-element-alignment{% if sliderConfig.verticalAlign.value == "center" %} align-self-center{% elseif sliderConfig.verticalAlign.value == "flex-end" %} align-self-end{% else %} align-self-start{% endif %}">
  154.             {%  endif %}
  155.             <div class="base-slider image-slider zen-image-slider{% if sliderConfig.navigationArrows.value == "outside" %} has-nav-outside{% endif %}{% if sliderConfig.navigationDots.value == "outside" %} has-dots-outside{% endif %}"
  156.                  data-base-slider="true"
  157.                  data-base-slider-options='{{ baseSliderOptions|json_encode }}'>
  158.                 {% block element_zen_image_slider_inner %}
  159.                     <div class="image-slider-container"
  160.                          data-base-slider-container="true">
  161.                         {% for image in element.data.sliderItems %}
  162.                             {% set imageElement %}
  163.                                 <div class="image-slider-item{% if loop.first != true %} is-not-first{% endif %} is-{{ sliderConfig.displayMode.value }}"
  164.                                      {% if sliderConfig.minHeight.value and  sliderConfig.displayMode.value == "cover" %}style="min-height: {{ sliderConfig.minHeight.value }}"{% endif %}>
  165.                                     {% set attributes = {
  166.                                         'class': 'img-fluid image-slider-image',
  167.                                         'alt': (image.media.translated.alt ?: ''),
  168.                                         'title': (image.media.translated.title ?: '')
  169.                                     } %}
  170.                                     {# ... enables lazy loading for images,
  171.                                     but only on cover mode, because of JS height calculation #}
  172.                                     {% if element.config.displayMode.value == 'cover' %}
  173.                                         {% if config('zenitPlatformStratus.config.lazyloading') %}
  174.                                             {% set attributes = attributes|merge({ 'loading': 'lazy' }) %}
  175.                                         {% endif %}
  176.                                     {% endif %}
  177.                                     {% if element.config.displayMode.value == 'cover' or element.config.displayMode.value == 'contain' %}
  178.                                         {% set attributes = attributes|merge({ 'data-object-fit': element.config.displayMode.value }) %}
  179.                                     {% endif %}
  180.                                     {% sw_thumbnails 'cms-image-slider-thumbnails' with {
  181.                                         media: image.media
  182.                                     } %}
  183.                                 </div>
  184.                             {% endset %}
  185.                             {% set contentElement %}
  186.                                 {% set animationClasses = [] %}
  187.                                 {% set animationClasses = ['animation-in-' ~ image.animationIn]|merge(animationClasses) %}
  188.                                 {# sticky header js options #}
  189.                                 {% set parallaxMousemoveOptions = {
  190.                                     parallaxTargetSelector: '.zen-image-slider-item-text'
  191.                                 } %}
  192.                                 {% block element_zen_image_slider_inner_content_container %}
  193.                                     <div class="zen-image-slider-item-content-container"
  194.                                          {% if image.animation == "parallax-mousemove" %}data-parallax-mousemove="true" data-zen-parallax-mousemove-options="{{ parallaxMousemoveOptions|json_encode }}"{% endif %}
  195.                                     >
  196.                                         {% if image.overlay %}
  197.                                             <div class="zen-image-slider-item-overlay"></div>
  198.                                         {% endif %}
  199.                                         {% if image.text %}
  200.                                             {% set content = image.text|raw %}
  201.                                             <div class="zen-image-slider-item-text-container {{ animationClasses|sort|join(' ') }}">
  202.                                                 {% if image.url %}
  203.                                                     <a href="{{ image.url }}"
  204.                                                        class="image-slider-link"
  205.                                                        {% if image.newTab %}target="_blank" rel="noopener"{% endif %}>
  206.                                                     </a>
  207.                                                 {% endif %}
  208.                                                 <div class="zen-image-slider-item-text" data-speed="1">
  209.                                                     <div class="zen-image-slider-item-text-value">
  210.                                                         {% if config('zenitPlatformStratus.config.twigStringLoaderExtension') %}
  211.                                                             {% sw_include '@zenitPlatformStratus/storefront/utilities/zen-template-from-string.html.twig' with {
  212.                                                                 content: content
  213.                                                             } only %}
  214.                                                         {% else %}
  215.                                                             {{ content|raw }}
  216.                                                         {% endif %}
  217.                                                     </div>
  218.                                                 </div>
  219.                                             </div>
  220.                                         {% else %}
  221.                                             {% if image.url %}
  222.                                                 <a href="{{ image.url }}"
  223.                                                    class="image-slider-link"
  224.                                                    {% if image.newTab %}target="_blank" rel="noopener"{% endif %}>
  225.                                                 </a>
  226.                                             {% endif %}
  227.                                         {% endif %}
  228.                                     </div>
  229.                                 {% endblock %}
  230.                             {% endset %}
  231.                             {% block element_zen_image_slider_inner_item %}
  232.                                 {% set elemClasses = [] %}
  233.                                 {% set elemClasses = ['animation-' ~ image.animation]|merge(elemClasses) %}
  234.                                 {% set elemClasses = [image.customItemClasses]|merge(elemClasses) %}
  235.                                 <div class="image-slider-item-container zen-slider-item-{{ loop.index }} {{ elemClasses|sort|join(' ') }}">
  236.                                     <div class="image-slider-item-inner">
  237.                                         {{ imageElement }}
  238.                                         {{ contentElement }}
  239.                                     </div>
  240.                                 </div>
  241.                             {% endblock %}
  242.                         {% endfor %}
  243.                     </div>
  244.                     {% block element_zen_image_slider_controls %}
  245.                         {% if sliderConfig.navigationArrows.value %}
  246.                             <div class="image-slider-controls-container">
  247.                                 <div class="base-slider-controls"
  248.                                      data-base-slider-controls="true">
  249.                                     {% block element_zen_image_slider_controls_items %}
  250.                                         {% block element_zen_image_slider_controls_items_arrows %}
  251.                                             <button class="base-slider-controls-prev image-slider-controls-prev{% if sliderConfig.navigationArrows.value == "outside" %} is-nav-prev-outside{% elseif sliderConfig.navigationArrows.value == "inside" %} is-nav-prev-inside{% endif %}">
  252.                                                 {% block element_zen_image_slider_controls_items_prev_icon %}
  253.                                                     {% sw_icon 'arrow-head-left' %}
  254.                                                 {% endblock %}
  255.                                             </button>
  256.                                             <button class="base-slider-controls-next image-slider-controls-next{% if sliderConfig.navigationArrows.value == "outside" %} is-nav-next-outside{% elseif sliderConfig.navigationArrows.value == "inside" %} is-nav-next-inside{% endif %}">
  257.                                                 {% block element_zen_image_slider_controls_items_next_icon %}
  258.                                                     {% sw_icon 'arrow-head-right' %}
  259.                                                 {% endblock %}
  260.                                             </button>
  261.                                         {% endblock %}
  262.                                     {% endblock %}
  263.                                 </div>
  264.                             </div>
  265.                         {% endif %}
  266.                     {% endblock %}
  267.                 {% endblock %}
  268.             </div>
  269.             {% if sliderConfig.verticalAlign.value %}
  270.                 </div>
  271.             {% endif %}
  272.         {% endblock %}
  273.     </div>
  274. {% endblock %}