custom/plugins/SolidProductVideos/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 %}
  3.     {% set isMappedToProductMedia = element.config.sliderItems.source == 'mapped' and element.config.sliderItems.value == 'product.media' %}
  4.     {% set mediaItems = isProduct or isMappedToProductMedia ? page.product.extensions.solidPvCombinedMedia.get('combinedMedia') : mediaItems %}
  5.     {% set imageCount = mediaItems|length %}
  6.     {{ parent() }}
  7. {% endblock %}
  8. {% block element_image_gallery_inner_items %}
  9.     {% block solid_pv_element_image_gallery_inner_items %}
  10.         {% set productVideosConfig = config('SolidProductVideos.config') %}
  11.         {% set isMappedToProductMedia = element.config.sliderItems.source == 'mapped' and element.config.sliderItems.value == 'product.media' %}
  12.         {% set mediaItems = isProduct or isMappedToProductMedia ? page.product.extensions.solidPvCombinedMedia.get('combinedMedia') : mediaItems %}
  13.         {% for mediaItem in mediaItems %}
  14.             {% block element_image_gallery_inner_item %}
  15.                 <div class="gallery-slider-item-container">
  16.                     {% if (isProduct or isMappedToProductMedia) and ((mediaItem.source and mediaItem.videoId) or mediaItem.media.mimeType | split('/')[0] == 'video') %}
  17.                         {% set isVideo = true %}
  18.                     {% endif %}
  19.                     <div class="gallery-slider-item is-{{ displayMode }} {% if isVideo %}is-video{% else %}js-magnifier-container{% endif %}" {% if minHeight and (displayMode == "cover" or displayMode == "contain" ) %} style="min-height: {{ minHeight }}" {% endif %}>
  20.                         {% set attributes = {
  21.                             'class': 'img-fluid gallery-slider-image' ~ (isVideo ?: ' magnifier-image js-magnifier-image'),
  22.                             'alt': (isProduct or isMappedToProductMedia ? (mediaItem.media.translated.alt ?: fallbackImageTitle) : (mediaItem.translated.alt ?: fallbackImageTitle)),
  23.                             'title': (isProduct or isMappedToProductMedia ? (mediaItem.media.translated.title ?: fallbackImageTitle) : (mediaItem.translated.title ?: fallbackImageTitle)),
  24.                             'data-full-image': (isVideo ?: (isProduct or isMappedToProductMedia ? mediaItem.media.url : mediaItem.url))
  25.                         } %}
  26.                         {% if displayMode == 'cover' or displayMode == 'contain' %}
  27.                             {% set attributes = attributes|merge({ 'data-object-fit': displayMode }) %}
  28.                         {% endif %}
  29.                         {% if (isProduct or isMappedToProductMedia) and not isVideo %}
  30.                             {% set attributes = attributes|merge({ 'itemprop': 'image' }) %}
  31.                         {% endif %}
  32.                         {% block solid_pv_gallery_slider_image_conditions %}
  33.                             {% if (isProduct or isMappedToProductMedia) and (mediaItem.source and mediaItem.videoId) %}
  34.                                 {% if productVideosConfig.forceUserConsent %}
  35.                                     {% sw_include '@SolidProductVideos/storefront/element/cms-element-image-gallery/image-gallery-components/cms-element-image-gallery-content-blocker.html.twig' with {
  36.                                         source: mediaItem.source,
  37.                                         videoId: mediaItem.videoId
  38.                                     } %}
  39.                                 {% else %}
  40.                                     {% sw_include '@SolidProductVideos/storefront/element/cms-element-image-gallery/image-gallery-components/cms-element-image-gallery-' ~ mediaItem.source ~ '.html.twig' with {
  41.                                         videoId: mediaItem.videoId
  42.                                     } %}
  43.                                 {% endif %}
  44.                             {% elseif (isProduct or isMappedToProductMedia) and mediaItem.media.mimeType | split('/')[0] == 'video' %}
  45.                                 {% sw_include '@SolidProductVideos/storefront/element/cms-element-image-gallery/image-gallery-components/cms-element-image-gallery-video.html.twig' %}
  46.                             {% else %}
  47.                                 {% block solid_pv_gallery_slider_image_image %}
  48.                                     {% sw_thumbnails 'gallery-slider-image-thumbnails' with {
  49.                                         media: (isProduct or isMappedToProductMedia ? mediaItem.media : mediaItem)
  50.                                     } %}
  51.                                 {% endblock %}
  52.                             {% endif %}
  53.                         {% endblock %}
  54.                     </div>
  55.                 </div>
  56.             {% endblock %}
  57.         {% endfor %}
  58.     {% endblock %}
  59. {% endblock %}
  60. {% block element_image_gallery_inner_single %}
  61.     {% set productVideosConfig = config('SolidProductVideos.config') %}
  62.     {% set isMappedToProductMedia = element.config.sliderItems.source == 'mapped' and element.config.sliderItems.value == 'product.media' %}
  63.     {% set mediaItems = isProduct or isMappedToProductMedia ? page.product.extensions.solidPvCombinedMedia.get('combinedMedia') : mediaItems %}
  64.     {% set mediaItem = mediaItems|first %}
  65.     {% set imageCount = mediaItems|length %}
  66.     {% block solid_pv_element_image_gallery_inner_single %}
  67.         {% if (isProduct or isMappedToProductMedia) and ((mediaItem.source and mediaItem.videoId) or mediaItem.media.mimeType | split('/')[0] == 'video') %}
  68.             {% set isVideo = true %}
  69.         {% endif %}
  70.         <div class="gallery-slider-single-image is-{{ displayMode }} {% if isVideo %}is-video{% else %}js-magnifier-container{% endif %}" {% if minHeight %} style="min-height: {{ minHeight }}" {% endif %}>
  71.             {% if imageCount > 0 %}
  72.                 {% set attributes = {
  73.                     'class': 'img-fluid gallery-slider-image' ~ (isVideo ?: ' magnifier-image js-magnifier-image'),
  74.                     'alt': (isProduct or isMappedToProductMedia ? (mediaItem.media.translated.alt ?: fallbackImageTitle) : (mediaItem.translated.alt ?: fallbackImageTitle)),
  75.                     'title': (isProduct or isMappedToProductMedia ? (mediaItem.media.translated.title ?: fallbackImageTitle) : (mediaItem.translated.title ?: fallbackImageTitle)),
  76.                     'data-full-image': (isVideo ?: (isProduct or isMappedToProductMedia ? mediaItem.media.url : mediaItem.url))
  77.                 } %}
  78.                 {% if displayMode == 'cover' or displayMode == 'contain' %}
  79.                     {% set attributes = attributes|merge({ 'data-object-fit': displayMode }) %}
  80.                 {% endif %}
  81.                 {% if (isProduct or isMappedToProductMedia) and not isVideo %}
  82.                     {% set attributes = attributes|merge({ 'itemprop': 'image' }) %}
  83.                 {% endif %}
  84.                 {% block solid_pv_gallery_slider_image_single_conditions %}
  85.                     {% if (isProduct or isMappedToProductMedia) and (mediaItem.source and mediaItem.videoId) %}
  86.                         {% if productVideosConfig.forceUserConsent %}
  87.                             {% sw_include '@SolidProductVideos/storefront/element/cms-element-image-gallery/image-gallery-components/cms-element-image-gallery-content-blocker.html.twig' with {
  88.                                 source: mediaItem.source,
  89.                                 videoId: mediaItem.videoId
  90.                             } %}
  91.                         {% else %}
  92.                             {% sw_include '@SolidProductVideos/storefront/element/cms-element-image-gallery/image-gallery-components/cms-element-image-gallery-' ~ mediaItem.source ~ '.html.twig' with {
  93.                                 videoId: mediaItem.videoId
  94.                             } %}
  95.                         {% endif %}
  96.                     {% elseif (isProduct or isMappedToProductMedia) and mediaItem.media.mimeType | split('/')[0] == 'video' %}
  97.                         {% sw_include '@SolidProductVideos/storefront/element/cms-element-image-gallery/image-gallery-components/cms-element-image-gallery-video.html.twig' %}
  98.                     {% else %}
  99.                         {% block solid_pv_gallery_slider_image_single_image %}
  100.                             {% sw_thumbnails 'gallery-slider-image-thumbnails' with {
  101.                                 media: (isProduct or isMappedToProductMedia ? mediaItem.media : mediaItem)
  102.                             } %}
  103.                         {% endblock %}
  104.                     {% endif %}
  105.                 {% endblock %}
  106.             {% else %}
  107.                 {% sw_icon 'placeholder' style {
  108.                     'size': 'fluid'
  109.                 } %}
  110.             {% endif %}
  111.         </div>
  112.     {% endblock %}
  113. {% endblock %}
  114. {% block element_image_gallery_inner_thumbnails_items %}
  115.     {% block solid_pv_element_image_gallery_inner_thumbnails_items %}
  116.         {% set productVideosConfig = config('SolidProductVideos.config') %}
  117.         {% set isMappedToProductMedia = element.config.sliderItems.source == 'mapped' and element.config.sliderItems.value == 'product.media' %}
  118.         {% set mediaItems = isProduct or isMappedToProductMedia ? page.product.extensions.solidPvCombinedMedia.get('combinedMedia') : mediaItems %}
  119.         {% for mediaItem in mediaItems %}
  120.             {% block element_image_gallery_inner_thumbnails_item %}
  121.                 <div class="gallery-slider-thumbnails-item">
  122.                     {% block element_image_gallery_inner_thumbnails_item_inner %}
  123.                         <div class="gallery-slider-thumbnails-item-inner">
  124.                             {% set attributes = {
  125.                                 'class': 'gallery-slider-thumbnails-image',
  126.                                 'alt': (isProduct or isMappedToProductMedia ? (mediaItem.media.translated.alt ?: fallbackImageTitle) : (mediaItem.translated.alt ?: fallbackImageTitle)),
  127.                                 'title': (isProduct or isMappedToProductMedia ? (mediaItem.media.translated.title ?: fallbackImageTitle) : (mediaItem.translated.title ?: fallbackImageTitle))
  128.                             } %}
  129.                             {% if (isProduct or isMappedToProductMedia) and not isVideo %}
  130.                                 {% set attributes = attributes|merge({ 'itemprop': 'image' }) %}
  131.                             {% endif %}
  132.                             {% block solid_pv_gallery_slider_thumbnail_conditions %}
  133.                                 {% if (isProduct or isMappedToProductMedia) and mediaItem.media.mimeType | split('/')[0] == 'video' and not mediaItem.extensions.solidPvVideoThumbnail %}
  134.                                     {% block solid_pv_gallery_slider_thumbnail_video %}
  135.                                         <div class="solid-pv-item">
  136.                                             <video preload="none">
  137.                                                 <source src="{{ mediaItem.media.url }}" type="{{ mediaItem.media.mimeType }}">
  138.                                             </video>
  139.                                             <div class="solid-pv-icon">
  140.                                                 {% sw_icon 'multicolor-action-play' style {
  141.                                                     'namespace': 'SolidProductVideos'
  142.                                                 } %}
  143.                                             </div>
  144.                                         </div>
  145.                                     {% endblock %}
  146.                                 {% else %}
  147.                                     {% block solid_pv_gallery_slider_thumbnail_image %}
  148.                                         {% if mediaItem.source and mediaItem.videoId %}
  149.                                             {% if mediaItem.thumbnailMedia %}
  150.                                                 {% sw_thumbnails 'gallery-slider-thumbnails-image-thumbnails' with {
  151.                                                     media: mediaItem.thumbnailMedia,
  152.                                                     sizes: {
  153.                                                         'default': '200px'
  154.                                                     }
  155.                                                 } %}
  156.                                             {% else %}
  157.                                                 <img
  158.                                                     class="gallery-slider-thumbnails-image"
  159.                                                     src="{{ solidPvGetProductEmbeddedVideoMediaThumbnailUrl(mediaItem) }}"
  160.                                                     alt="{{ page.product.translated.name }}"
  161.                                                     title="{{ page.product.translated.name }}"
  162.                                                 >
  163.                                             {% endif %}
  164.                                         {% elseif mediaItem.extensions.solidPvVideoThumbnail %}
  165.                                             {% sw_thumbnails 'gallery-slider-thumbnails-image-thumbnails' with {
  166.                                                 media: mediaItem.extensions.solidPvVideoThumbnail.media,
  167.                                                 sizes: {
  168.                                                     'default': '200px'
  169.                                                 }
  170.                                             } %}
  171.                                         {% else %}
  172.                                             {% sw_thumbnails 'gallery-slider-thumbnails-image-thumbnails' with {
  173.                                                 media: (isProduct or isMappedToProductMedia ? mediaItem.media : mediaItem),
  174.                                                 sizes: {
  175.                                                     'default': '200px'
  176.                                                 }
  177.                                             } %}
  178.                                         {% endif %}
  179.                                         {% block solid_pv_gallery_slider_thumbnail_icon %}
  180.                                             {% if (isProduct or isMappedToProductMedia) and ((mediaItem.source and mediaItem.videoId) || mediaItem.media.mimeType | split('/')[0] == 'video') %}
  181.                                                 <div class="solid-pv-icon">
  182.                                                     {% sw_icon 'multicolor-action-play' style {
  183.                                                         'namespace': 'SolidProductVideos'
  184.                                                     } %}
  185.                                                 </div>
  186.                                             {% endif %}
  187.                                         {% endblock %}
  188.                                     {% endblock %}
  189.                                 {% endif %}
  190.                             {% endblock %}
  191.                         </div>
  192.                     {% endblock %}
  193.                 </div>
  194.             {% endblock %}
  195.         {% endfor %}
  196.     {% endblock %}
  197. {% endblock %}
  198. {% block element_image_gallery_inner_zoom_modal_slider_items %}
  199.     {% block solid_pv_element_image_gallery_inner_zoom_modal_slider_items %}
  200.         {% set productVideosConfig = config('SolidProductVideos.config') %}
  201.         {% set isMappedToProductMedia = element.config.sliderItems.source == 'mapped' and element.config.sliderItems.value == 'product.media' %}
  202.         {% set mediaItems = isProduct or isMappedToProductMedia ? page.product.extensions.solidPvCombinedMedia.get('combinedMedia') : mediaItems %}
  203.         {% for mediaItem in mediaItems %}
  204.             {% block element_image_gallery_inner_zoom_modal_slider_item %}
  205.                 <div class="gallery-slider-item">
  206.                     {% block element_image_gallery_inner_zoom_modal_slider_item_zoom_container %}
  207.                         {% block element_image_gallery_inner_zoom_modal_slider_item_image %}
  208.                             {% block solid_pv_gallery_slider_zoom_modal_image_conditions %}
  209.                                 {% if (isProduct or isMappedToProductMedia) and (mediaItem.source and mediaItem.videoId) %}
  210.                                     {% if productVideosConfig.forceUserConsent %}
  211.                                         {% sw_include '@SolidProductVideos/storefront/element/cms-element-image-gallery/image-gallery-components/cms-element-image-gallery-content-blocker.html.twig' with {
  212.                                             source: mediaItem.source,
  213.                                             videoId: mediaItem.videoId
  214.                                         } %}
  215.                                     {% else %}
  216.                                         {% sw_include '@SolidProductVideos/storefront/element/cms-element-image-gallery/image-gallery-components/cms-element-image-gallery-' ~ mediaItem.source ~ '.html.twig' with {
  217.                                             videoId: mediaItem.videoId
  218.                                         } %}
  219.                                     {% endif %}
  220.                                 {% elseif (isProduct or isMappedToProductMedia) and mediaItem.media.mimeType | split('/')[0] == 'video' %}
  221.                                     {% sw_include '@SolidProductVideos/storefront/element/cms-element-image-gallery/image-gallery-components/cms-element-image-gallery-video.html.twig' %}
  222.                                 {% else %}
  223.                                     <div class="image-zoom-container" data-image-zoom="true">
  224.                                         {% block solid_pv_gallery_slider_zoom_modal_image_image %}
  225.                                             {% sw_thumbnails 'gallery-slider-image-thumbnails' with {
  226.                                                 media: (isProduct or isMappedToProductMedia ? mediaItem.media : mediaItem),
  227.                                                 attributes: {
  228.                                                     'class': 'gallery-slider-image js-image-zoom-element js-load-img',
  229.                                                     'alt': (isProduct or isMappedToProductMedia ? (mediaItem.media.translated.alt ?: fallbackImageTitle) : (mediaItem.translated.alt ?: fallbackImageTitle)),
  230.                                                     'title': (isProduct or isMappedToProductMedia ? (mediaItem.media.translated.title ?: fallbackImageTitle) : (mediaItem.translated.title ?: fallbackImageTitle))
  231.                                                 }
  232.                                             } %}
  233.                                         {% endblock %}
  234.                                     </div>
  235.                                 {% endif %}
  236.                             {% endblock %}
  237.                         {% endblock %}
  238.                     {% endblock %}
  239.                 </div>
  240.             {% endblock %}
  241.         {% endfor %}
  242.     {% endblock %}
  243. {% endblock %}
  244. {% block element_image_gallery_inner_zoom_modal_thumbnails_items %}
  245.     {% block solid_pv_element_image_gallery_inner_zoom_modal_thumbnails_items %}
  246.         {% set productVideosConfig = config('SolidProductVideos.config') %}
  247.         {% set isMappedToProductMedia = element.config.sliderItems.source == 'mapped' and element.config.sliderItems.value == 'product.media' %}
  248.         {% set mediaItems = isProduct or isMappedToProductMedia ? page.product.extensions.solidPvCombinedMedia.get('combinedMedia') : mediaItems %}
  249.         {% for mediaItem in mediaItems %}
  250.             {% block element_image_gallery_inner_zoom_modal_thumbnails_item %}
  251.                 <div class="gallery-slider-thumbnails-item {% if (isProduct or isMappedToProductMedia) and mediaItem.media.mimeType |
  252.                         split('/')[0] == 'video' %}is-video{% endif %}">
  253.                     {% block element_image_gallery_inner_zoom_modal_thumbnails_item_inner %}
  254.                         <div class="gallery-slider-thumbnails-item-inner">
  255.                             {% block solid_pv_gallery_slider_zoom_modal_thumbnail_conditions %}
  256.                                 {% if (isProduct or isMappedToProductMedia) and mediaItem.media.mimeType | split('/')[0] == 'video' and not mediaItem.extensions.solidPvVideoThumbnail %}
  257.                                     {% block solid_pv_gallery_slider_zoom_modal_thumbnail_video %}
  258.                                         <div class="solid-pv-item">
  259.                                             <video preload="none">
  260.                                                 <source src="{{ mediaItem.media.url }}" type="{{ mediaItem.media.mimeType }}">
  261.                                             </video>
  262.                                             <div class="solid-pv-icon">
  263.                                                 {% sw_icon 'multicolor-action-play' style {
  264.                                                     'namespace': 'SolidProductVideos'
  265.                                                 } %}
  266.                                             </div>
  267.                                         </div>
  268.                                     {% endblock %}
  269.                                 {% else %}
  270.                                     {% block solid_pv_gallery_slider_zoom_modal_thumbnail_image %}
  271.                                         {% if mediaItem.source and mediaItem.videoId %}
  272.                                             {% if mediaItem.thumbnailMedia %}
  273.                                                 {% sw_thumbnails 'gallery-slider-thumbnails-image-thumbnails' with {
  274.                                                     media: mediaItem.thumbnailMedia,
  275.                                                     sizes: {
  276.                                                         'default': '200px'
  277.                                                     },
  278.                                                     attributes: {
  279.                                                         'class': 'gallery-slider-thumbnails-image',
  280.                                                         'alt': (isProduct or isMappedToProductMedia ? (mediaItem.media.translated.alt ?: fallbackImageTitle) : (mediaItem.translated.alt ?: fallbackImageTitle)),
  281.                                                         'title': (isProduct or isMappedToProductMedia ? (mediaItem.media.translated.title ?: fallbackImageTitle) : (mediaItem.translated.title ?: fallbackImageTitle))
  282.                                                     }
  283.                                                 } %}
  284.                                             {% else %}
  285.                                                 <img
  286.                                                     class="gallery-slider-thumbnails-image"
  287.                                                     src="{{ solidPvGetProductEmbeddedVideoMediaThumbnailUrl(mediaItem) }}"
  288.                                                     alt="{{ page.product.translated.name }}"
  289.                                                     title="{{ page.product.translated.name }}"
  290.                                                 >
  291.                                             {% endif %}
  292.                                         {% elseif mediaItem.extensions.solidPvVideoThumbnail %}
  293.                                             {% sw_thumbnails 'gallery-slider-thumbnails-image-thumbnails' with {
  294.                                                 media: mediaItem.extensions.solidPvVideoThumbnail.media,
  295.                                                 sizes: {
  296.                                                     'default': '200px'
  297.                                                 },
  298.                                                 attributes: {
  299.                                                     'class': 'gallery-slider-thumbnails-image',
  300.                                                     'alt': (isProduct or isMappedToProductMedia ? (mediaItem.media.translated.alt ?: fallbackImageTitle) : (mediaItem.translated.alt ?: fallbackImageTitle)),
  301.                                                     'title': (isProduct or isMappedToProductMedia ? (mediaItem.media.translated.title ?: fallbackImageTitle) : (mediaItem.translated.title ?: fallbackImageTitle))
  302.                                                 }
  303.                                             } %}
  304.                                         {% else %}
  305.                                             {% sw_thumbnails 'gallery-slider-thumbnails-image-thumbnails' with {
  306.                                                 media: (isProduct or isMappedToProductMedia ? mediaItem.media : mediaItem),
  307.                                                 sizes: {
  308.                                                     'default': '200px'
  309.                                                 },
  310.                                                 attributes: {
  311.                                                     'class': 'gallery-slider-thumbnails-image',
  312.                                                     'alt': (isProduct or isMappedToProductMedia ? (mediaItem.media.translated.alt ?: fallbackImageTitle) : (mediaItem.translated.alt ?: fallbackImageTitle)),
  313.                                                     'title': (isProduct or isMappedToProductMedia ? (mediaItem.media.translated.title ?: fallbackImageTitle) : (mediaItem.translated.title ?: fallbackImageTitle))
  314.                                                 }
  315.                                             } %}
  316.                                         {% endif %}
  317.                                         {% block solid_pv_gallery_slider_zoom_modal_thumbnail_icon %}
  318.                                             {% if (isProduct or isMappedToProductMedia) and ((mediaItem.source and mediaItem.videoId) || mediaItem.media.mimeType | split('/')[0] == 'video') %}
  319.                                                 <div class="solid-pv-icon">
  320.                                                     {% sw_icon 'multicolor-action-play' style {
  321.                                                         'namespace': 'SolidProductVideos'
  322.                                                     } %}
  323.                                                 </div>
  324.                                             {% endif %}
  325.                                         {% endblock %}
  326.                                     {% endblock %}
  327.                                 {% endif %}
  328.                             {% endblock %}
  329.                         </div>
  330.                     {% endblock %}
  331.                 </div>
  332.             {% endblock %}
  333.         {% endfor %}
  334.     {% endblock %}
  335. {% endblock %}