vendor/shopware/storefront/Resources/views/storefront/utilities/thumbnail.html.twig line 1

  1. {% block thumbnail_utility %}
  2.     {# activate load per default. If it is not activated only a data-src is set instead of the src tag. #}
  3.     {% if load is not defined %}
  4.         {% set load = true %}
  5.     {% endif %}
  6.     {# By default no original image will be loaded as soon as thumbnails are available. #}
  7.     {# When set to true the orginal image will be loaded when the viewport is greater than the largest available thumbnail. #}
  8.     {% if loadOriginalImage is not defined %}
  9.         {% set loadOriginalImage = false %}
  10.     {% endif %}
  11.     {# By default the srcset sizes will be calculated automatically if `columns` are present and no `sizes` are configured. #}
  12.     {# When set to false the sizes attribute will not be generated automatically. #}
  13.     {% if autoColumnSizes is not defined %}
  14.         {% set autoColumnSizes = true %}
  15.     {% endif %}
  16.     {% if attributes is not defined %}
  17.         {% set attributes = {} %}
  18.     {% endif %}
  19.     {% if attributes.alt is not defined and media.translated.alt is defined %}
  20.         {% set attributes = attributes|merge({'alt': media.translated.alt}) %}
  21.     {% endif %}
  22.     {% if attributes.title is not defined and media.translated.title is defined %}
  23.         {% set attributes = attributes|merge({'title': media.translated.title}) %}
  24.     {% endif %}
  25.     {# If no loading attribute is defined, use the default behaivour for images. #}
  26.     {% if attributes.loading is not defined %}
  27.         {% set attributes = attributes|merge({ 'loading': 'eager' }) %}
  28.     {% endif %}
  29.     {# uses cms block column count and all available thumbnails to determine the correct image size for the current viewport #}
  30.     {% if media.thumbnails|length > 0 %}
  31.         {% if autoColumnSizes and columns and sizes is not defined %}
  32.             {# set image size for every viewport #}
  33.             {% set sizes = {
  34.                 'xs': (theme_config('breakpoint.sm') - 1) ~'px',
  35.                 'sm': (theme_config('breakpoint.md') - 1) ~'px',
  36.                 'md': ((theme_config('breakpoint.lg') - 1) / columns)|round(0, 'ceil') ~'px',
  37.                 'lg': ((theme_config('breakpoint.xl') - 1) / columns)|round(0, 'ceil') ~'px'
  38.             } %}
  39.             {# set image size for largest viewport depending on the cms block sizing mode (boxed or full-width) #}
  40.             {% if layout == 'full-width' %}
  41.                 {% set container = 100 %}
  42.                 {% set sizes = sizes|merge({ 'xl': (container / columns)|round(0, 'ceil') ~'vw'}) %}
  43.             {% else %}
  44.                 {% set container = 1360 %}
  45.                 {% set sizes = sizes|merge({ 'xl': (container / columns)|round(0, 'ceil') ~'px'}) %}
  46.             {% endif %}
  47.         {% endif %}
  48.         {% set thumbnails = media.thumbnails|sort|reverse %}
  49.         {# generate srcset with all available thumbnails #}
  50.         {% set srcsetValue %}{% apply spaceless %}
  51.             {% if loadOriginalImage %}{{ media|sw_encode_media_url }} {{ thumbnails|first.width + 1 }}w, {% endif %}{% for thumbnail in thumbnails %}{{ thumbnail.url | sw_encode_url }} {{ thumbnail.width }}w{% if not loop.last %}, {% endif %}{% endfor %}
  52.         {% endapply %}{% endset %}
  53.         {# generate sizes #}
  54.         {% set sizesValue %}{% apply spaceless %}
  55.             {% set sizeFallback = 100 %}
  56.             {# set largest size depending on column count of cms block #}
  57.             {% if autoColumnSizes and columns %}
  58.                 {% set sizeFallback = (sizeFallback / columns)|round(0, 'ceil') %}
  59.             {% endif %}
  60.             {% set breakpoint = {
  61.                 'xs': theme_config('breakpoint.xs'),
  62.                 'sm': theme_config('breakpoint.sm'),
  63.                 'md': theme_config('breakpoint.md'),
  64.                 'lg': theme_config('breakpoint.lg'),
  65.                 'xl': theme_config('breakpoint.xl')
  66.             } %}
  67.             {% for key, value in breakpoint|reverse %}(min-width: {{ value }}px) {{ sizes[key] }}{% if not loop.last %}, {% endif %}{% endfor %}, {{ sizeFallback }}vw
  68.         {% endapply %}{% endset %}
  69.     {% endif %}
  70.     {% block thumbnail_utility_img %}
  71.         <img {% if load %}src="{{ media|sw_encode_media_url }}" {% else %}data-src="{{ media|sw_encode_media_url }}" {% endif %}
  72.             {% if media.thumbnails|length > 0 %}
  73.                 {% if load %}srcset="{{ srcsetValue }}" {% else %}data-srcset="{{ srcsetValue }}" {% endif %}
  74.                 {% if sizes['default'] %}
  75.                 sizes="{{ sizes['default'] }}"
  76.                 {% elseif sizes|length > 0 %}
  77.                 sizes="{{ sizesValue }}"
  78.                 {% endif %}
  79.             {% endif %}
  80.             {% for key, value in attributes %}{% if value != '' %} {{ key }}="{{ value }}"{% endif %}{% endfor %}
  81.         />
  82.     {% endblock %}
  83. {% endblock %}