custom/static-plugins/NdTheme/src/Resources/views/storefront/element/cms-element-image-gallery.html.twig line 1

Open in your IDE?
  1. {% sw_extends '@Storefront/storefront/element/cms-element-image-gallery.html.twig' %}
  2. {% block element_image_gallery_alignment %}
  3.     {% set navigationArrows = false %}
  4.     {% set zoom = false %}
  5.     {% set magnifierOverGallery = false %}
  6.     {% set gallerySliderOptions = {
  7.         "dots": true,
  8.         "mobileFirst": true,
  9.         "arrows": false,
  10.         "responsive": [
  11.             {
  12.                 "breakpoint": 1023,
  13.                 "settings": "unslick"
  14.             }
  15.         ]
  16.     } %}
  17.     {% if navigationArrows %}
  18.         {% set gallerySliderOptions = gallerySliderOptions|replace_recursive({
  19.             "arrows": true,
  20.             "prevArrow": "#prev-slide-"~element.id,
  21.             "nextArrow": "#next-slide-"~element.id,
  22.         }) %}
  23.     {% endif %}
  24.     {% block element_image_gallery_inner %}
  25.         <div class="row gallery-slider-row{% if imageCount == 1 %} is-single-image{% else %} is-loading{% endif %} js-gallery-zoom-modal-container lg:grid lg:grid-cols-[48px_1fr] lg:grid-gap-2"
  26.                 {% if zoom %}
  27.                     data-magnifier="true"
  28.                 {% endif %}
  29.                 {% if magnifierOptions|length > 0 %}
  30.                     data-magnifier-options='{{ magnifierOptions|json_encode|raw }}'
  31.                 {% endif %}
  32.                 {% if imageCount > 1 %}
  33.             data-gallery-slider-options='{{ gallerySliderOptions|json_encode }}'
  34.             data-custom-slider="true"
  35.                 {% endif %}>
  36.             {% block element_image_gallery_inner_col %}
  37.                 <div class="gallery-slider-col lg:order-last{% if galleryPosition == "left" %} is-left{% elseif galleryPosition == "underneath" %} is-underneath{% endif %}"
  38.                      {% if zoomModal %}data-zoom-modal="true"{% endif %}>
  39.                     {# option "magnifierOverGallery" shows zoom container over gallery #}
  40.                     <div class="gallery-slider relative {% if navigationArrows == "outside" %} has-nav-outside{% endif %}{% if navigationDots == "outside" %} has-dots-outside{% endif %}{% if magnifierOverGallery %} js-magnifier-zoom-image-container{% endif %}">
  41.                         {% block element_image_gallery_inner_wrapper %}
  42.                             {% if imageCount > 1 %}
  43.                                 {% block element_image_gallery_inner_multiple_slides %}
  44.                                     {% block element_image_gallery_inner_container %}
  45.                                         <div class="custom-slider slick-init pb-4 hide-scrollbar lg:pb-0 lg:flex-col lg:grid-gap-2 lg:!overflow-y-scroll lg:h-[46vw] 2xl:h-[40vw] lg:max-h-[760px]"
  46.                                              data-slick='{{ gallerySliderOptions|json_encode }}'
  47.                                              data-slider-container="true">
  48.                                             {% for image in mediaItems %}
  49.                                                 {% block element_image_gallery_inner_item %}
  50.                                                     <div class="custom-slide js-magnifier-container ratio ratio_product_image"{% if minHeight and  (displayMode == "cover" or displayMode == "contain" ) %} style="min-height: {{ minHeight }}"{% endif %}
  51.                                                          data-slide="{{ loop.index }}">
  52.                                                         {% set attributes = {
  53.                                                             'class': 'gallery-slider-image js-magnifier-image cursor-zoom-in',
  54.                                                             'alt': (image.translated.alt ?: fallbackImageTitle),
  55.                                                             'title': (image.translated.title ?: fallbackImageTitle),
  56.                                                             'data-full-image': image.url
  57.                                                         } %}
  58.                                                         {% if displayMode == 'cover' or displayMode == 'contain' %}
  59.                                                             {% set attributes = attributes|merge({ 'data-object-fit': displayMode }) %}
  60.                                                         {% endif %}
  61.                                                         {% if isProduct %}
  62.                                                             {% set attributes = attributes|merge({ 'itemprop': 'image' }) %}
  63.                                                         {% endif %}
  64.                                                         {% sw_thumbnails 'gallery-slider-image-thumbnails' with {
  65.                                                             media: image
  66.                                                         } %}
  67.                                                     </div>
  68.                                                 {% endblock %}
  69.                                             {% endfor %}
  70.                                         </div>
  71.                                     {% endblock %}
  72.                                     {% block element_image_gallery_inner_controls %}
  73.                                         {% if navigationArrows %}
  74.                                             <div class="gallery-slider-controls-container hidden absolute bottom-3 right-3 lg:block">
  75.                                                 <div class="flex grid-gap-2 justify-end">
  76.                                                     <button id="prev-slide-{{ element.id }}"
  77.                                                             class="products-back flex p-1 transition duration-300 active:-translate-x-0.5 hover:-translate-x-0.5">
  78.                                                         {% sw_icon 'arrow-head-left' %}
  79.                                                     </button>
  80.                                                     <button id="next-slide-{{ element.id }}"
  81.                                                             class="products-next flex p-1 transition duration-300 active:translate-x-0.5 hover:translate-x-0.5">
  82.                                                         {% sw_icon 'arrow-head-right' %}
  83.                                                     </button>
  84.                                                 </div>
  85.                                             </div>
  86.                                         {% endif %}
  87.                                     {% endblock %}
  88.                                 {% endblock %}
  89.                             {% else %}
  90.                                 {% block element_image_gallery_inner_single %}
  91.                                     <div class="gallery-slider-single-image js-magnifier-container ratio ratio_product_image"{% if minHeight %} style="min-height: {{ minHeight }}"{% endif %}>
  92.                                         {% if imageCount > 0 %}
  93.                                             {% set attributes = {
  94.                                                 'class': 'gallery-slider-image magnifier-image js-magnifier-image cursor-zoom-in',
  95.                                                 'alt': (mediaItems|first.translated.alt ?: fallbackImageTitle),
  96.                                                 'title': (mediaItems|first.translated.title ?: fallbackImageTitle),
  97.                                                 'data-full-image': mediaItems|first.url
  98.                                             } %}
  99.                                             {% if displayMode == 'cover' or displayMode == 'contain' %}
  100.                                                 {% set attributes = attributes|merge({ 'data-object-fit': displayMode }) %}
  101.                                             {% endif %}
  102.                                             {% if isProduct %}
  103.                                                 {% set attributes = attributes|merge({ 'itemprop': 'image' }) %}
  104.                                             {% endif %}
  105.                                             {% sw_thumbnails 'gallery-slider-image-thumbnails' with {
  106.                                                 media: mediaItems|first,
  107.                                             } %}
  108.                                         {% else %}
  109.                                             {% sw_icon 'placeholder' style {
  110.                                                 'size': 'fluid'
  111.                                             } %}
  112.                                         {% endif %}
  113.                                     </div>
  114.                                 {% endblock %}
  115.                             {% endif %}
  116.                         {% endblock %}
  117.                     </div>
  118.                 </div>
  119.             {% endblock %}
  120.             {% block element_image_gallery_inner_thumbnails_col %}
  121.                 {% if imageCount > 1 %}
  122.                     <div class="custom-thumbnail-control-container hidden lg:block lg:order-first {% if galleryPosition == "left" %} is-left{% elseif galleryPosition == "underneath" %} is-underneath{% endif %}">
  123.                         {% block element_image_gallery_inner_thumbnails %}
  124.                             <div class="custom-thumbnail-control {% if galleryPosition == "underneath" %} is-underneath{% endif %} lg:grid lg:grid-gap-2"
  125.                                  data-slider-thumbnails="true" data-active-thumbnail-classes="active !border-grey-900">
  126.                                 {% block element_image_gallery_inner_thumbnails_items %}
  127.                                     {% for image in mediaItems %}
  128.                                         {% block element_image_gallery_inner_thumbnails_item %}
  129.                                             <div class="thumbnails-item">
  130.                                                 {% block element_image_gallery_inner_thumbnails_item_inner %}
  131.                                                     <div class="thumbnails-item-inner w-12 ratio ratio_product_image">
  132.                                                         {% set attributes = {
  133.                                                             'class': 'gallery-slider-thumbnails-image rounded-sm transition cursor-pointer border border-transparent ' ~ ((loop.first) ? '!border-grey-900' : ' border-transparent'),
  134.                                                             'alt': (image.translated.alt ?: fallbackImageTitle),
  135.                                                             'title': (image.translated.title ?: fallbackImageTitle)
  136.                                                         } %}
  137.                                                         {% if isProduct %}
  138.                                                             {% set attributes = attributes|merge({ 'itemprop': 'image', 'data-thumbnail': loop.index}) %}
  139.                                                         {% endif %}
  140.                                                         {% sw_thumbnails 'gallery-slider-thumbnails-image-thumbnails' with {
  141.                                                             media: image,
  142.                                                             sizes: {
  143.                                                                 'default': '200px'
  144.                                                             }
  145.                                                         } %}
  146.                                                     </div>
  147.                                                 {% endblock %}
  148.                                             </div>
  149.                                         {% endblock %}
  150.                                     {% endfor %}
  151.                                 {% endblock %}
  152.                             </div>
  153.                         {% endblock %}
  154.                     </div>
  155.                 {% else %}
  156.                     <div class="placeholder for-slider-thumbnails"></div>
  157.                 {% endif %}
  158.             {% endblock %}
  159.             {% block element_image_gallery_inner_zoom_modal_wrapper %}
  160.                 {% if zoomModal %}
  161.                     <div class="zoom-modal-wrapper">
  162.                         {% sw_include '@Storefront/storefront/component/product/image-gallery/zoom-modal.html.twig' %}
  163.                     </div>
  164.                 {% endif %}
  165.             {% endblock %}
  166.         </div>
  167.     {% endblock %}
  168. {% endblock %}