custom/plugins/zenitPlatformHorizon/src/Resources/views/storefront/utilities/thumbnail.html.twig line 1

Open in your IDE?
  1. {# TODO: @zenit - check on sw update #}
  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. {# uses cms block column count and all available thumbnails to determine the correct image size for the current viewport #}
  26. {% if media.thumbnails|length > 0 %}
  27.     {% if autoColumnSizes and columns and sizes is not defined %}
  28.         {# set image size for every viewport #}
  29.         {% set sizes = {
  30.             'xs': (theme_config('breakpoint.sm') - 1) ~'px',
  31.             'sm': (theme_config('breakpoint.md') - 1) ~'px',
  32.             'md': ((theme_config('breakpoint.lg') - 1) / columns)|round(0, 'ceil') ~'px',
  33.             'lg': ((theme_config('breakpoint.xl') - 1) / columns)|round(0, 'ceil') ~'px'
  34.         } %}
  35.         {# Start: @zenit - Consider portrait images, because the width of their thumbnails is less than the calculated thumbnail specification #}
  36.         {% set imageHeight = media.metaData.height|intval %}
  37.         {% set imageWidth = media.metaData.width|intval %}
  38.         {% if imageHeight > 0 and imageWidth > 0 %}
  39.             {% set imageAspectRatio = imageHeight / imageWidth %}
  40.         {% endif %}
  41.         {% if imageAspectRatio > 1 %}
  42.             {% set sizes = {
  43.                 'xs': (theme_config('breakpoint.sm') * imageAspectRatio - 1) ~'px',
  44.                 'sm': (theme_config('breakpoint.md') * imageAspectRatio - 1) ~'px',
  45.                 'md': ((theme_config('breakpoint.lg') * imageAspectRatio - 1) / columns)|round(0, 'ceil') ~'px',
  46.                 'lg': ((theme_config('breakpoint.xl') * imageAspectRatio - 1) / columns)|round(0, 'ceil') ~'px'
  47.             } %}
  48.         {% endif %}
  49.         {# End: @zenit - Consider portrait images, because the width of their thumbnails is less than the calculated thumbnail specification #}
  50.         {# set image size for largest viewport depending on the cms block sizing mode (boxed or full-width) #}
  51.         {% if layout == 'full-width' %}
  52.             {% set container = 100 %}
  53.             {% set sizes = sizes|merge({ 'xl': (container / columns)|round(0, 'ceil') ~'vw'}) %}
  54.         {% else %}
  55.             {# ... @zenit - add layout container width from theme configuration #}
  56.             {% set container = theme_config("zen-layout-container-width") ?: 1400 %}
  57.             {% set sizes = sizes|merge({ 'xl': (container / columns)|round(0, 'ceil') ~'px'}) %}
  58.             {# Start: @zenit - Consider portrait images, because the width of their thumbnails is less than the calculated thumbnail specification #}
  59.             {% if imageAspectRatio > 1 %}
  60.                 {% set sizes = sizes|merge({ 'xl': ((container / columns) * imageAspectRatio)|round(0, 'ceil') ~'px'}) %}
  61.             {% endif %}
  62.             {# End: @zenit - Consider portrait images, because the width of their thumbnails is less than the calculated thumbnail specification #}
  63.         {% endif %}
  64.     {% endif %}
  65.     {% set thumbnails = media.thumbnails|sort|reverse %}
  66.     {# generate srcset with all available thumbnails #}
  67.     {% set srcsetValue %}{% apply spaceless %}
  68.         {% 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 %}
  69.     {% endapply %}{% endset %}
  70.     {# generate sizes #}
  71.     {% set sizesValue %}{% apply spaceless %}
  72.         {% set sizeFallback = 100 %}
  73.         {# set largest size depending on column count of cms block #}
  74.         {% if autoColumnSizes and columns %}
  75.             {% set sizeFallback = (sizeFallback / columns)|round(0, 'ceil') %}
  76.         {% endif %}
  77.         {% set breakpoint = {
  78.             'xs': theme_config('breakpoint.xs'),
  79.             'sm': theme_config('breakpoint.sm'),
  80.             'md': theme_config('breakpoint.md'),
  81.             'lg': theme_config('breakpoint.lg'),
  82.             'xl': theme_config('breakpoint.xl')
  83.         } %}
  84.         {% if thumbnails|first.width > breakpoint|reverse|first %}
  85.             {# @deprecated @zenit tag:v3.1.0 - Variable `maxWidth` and parent condition will be removed #}
  86.             {% set maxWidth = thumbnails|first.width %}
  87.         {% endif %}
  88.         {% for key, value in breakpoint|reverse %}(min-width: {{ value }}px) {{ sizes[key] }}{% if not loop.last %}, {% endif %}{% endfor %}, {{ sizeFallback }}vw
  89.     {% endapply %}{% endset %}
  90. {% endif %}
  91. <img {% if load %}src="{{ media|sw_encode_media_url }}" {% else %}data-src="{{ media|sw_encode_media_url }}" {% endif %}
  92.     {% if media.thumbnails|length > 0 %}
  93.         {% if load %}srcset="{{ srcsetValue }}" {% else %}data-srcset="{{ srcsetValue }}" {% endif %}
  94.         {% if sizes['default'] %}
  95.         sizes="{{ sizes['default'] }}"
  96.         {% elseif sizes|length > 0 %}
  97.         sizes="{{ sizesValue }}"
  98.         {% endif %}
  99.     {% endif %}
  100.     {% for key, value in attributes %}{% if value != '' %} {{ key }}="{{ value }}"{% endif %}{% endfor %}
  101. />