templates/includes/areas/detail-sidebar.html.twig line 1

Open in your IDE?
  1. {% set isDecor = isDecor|default(false) %}
  2. {% set isSurface = isSurface|default(false) %}
  3. {% set content = content|default(null) %}
  4. {% set contactButton = contactButton|default(false) %}
  5. {% set cartButton = cartButton|default(false) %}
  6. {% set event = event ?? '' %}
  7. {% set showCountryDisclaimer = false %}
  8. {% set characteristics = characteristics is defined ? characteristics : null %}
  9. <div class="js-affix__placeholder">
  10.     <section class="box-details js-affix" data-affix-offset="159">
  11.             <div class="box-details__box">
  12.                 <h4 class="box-details__title mb-0">{{ title }}</h4>
  13.                 <div class="text-gray-650 fs-sm mb-4">{{ subtitle }}</div>
  14.                 {% if formats|default(false) %}
  15.                     <b>{{ 'detail.formats'|trans }}</b>
  16.                     <ul>
  17.                         {% for format in formats %}
  18.                             <li>{{ format }}</li>
  19.                         {% endfor %}
  20.                     </ul>
  21.                 {% endif %}
  22.                 {% if isDecor %}
  23.                     {% if decor.direction %}
  24.                         {{ ('decor.direction.' ~ decor.direction) | trans }}<br>
  25.                     {% endif %}
  26.                     {% if decor.surfacesInterior is not empty %}
  27.                         {{ 'decor.standard.surfaces.interior' | trans }}
  28.                         {{ decor.surfacesInterior | map(surface => "#{surface.title}") | join(', ') }}<br>
  29.                     {% endif %}
  30.                     {% if decor.surfacesExterior is not empty %}
  31.                         {{ 'decor.standard.surfaces.exterior' | trans }}
  32.                         {{ decor.surfacesExterior | map(surface => "#{surface.title}") | join(', ') }}<br>
  33.                     {% endif %}
  34.                     {% if decor.moreSurfacesInterior is not empty %}
  35.                         {{ 'decor.more.surfaces.interior' | trans }}
  36.                         {{ decor.moreSurfacesInterior | map(surface => "#{surface.title}") | join(', ') }}<br>
  37.                     {% endif %}
  38.                     {% if decor.moreSurfacesExterior is not empty %}
  39.                         {{ 'decor.more.surfaces.exterior' | trans }}
  40.                         {{ decor.moreSurfacesExterior | map(surface => "#{surface.title}") | join(', ') }}<br>
  41.                     {% endif %}
  42.                     {% if decor.ncsCode or decor.ralNr or decor.colorCode %}
  43.                         <div class="mb-4">
  44.                             <b>{{ 'detail-sidebar.colors'|trans }}</b>
  45.                             {% if decor.ncsCode %}
  46.                                 <br>{{ 'detail-decor.NCS' | trans }} {{ decor.ncsCode }}
  47.                             {% endif %}
  48.                             {% if decor.ralNr %}
  49.                                 <br>{{ 'detail-decor.RAL' | trans }} {{ decor.ralNr }}
  50.                             {% endif %}
  51.                             {% if decor.colorCode %}
  52.                                 <br>{{ 'detail-decor.CMYK' | trans }} {{ decor.colorCode }}
  53.                             {% endif %}
  54.                             {% if  decor.ncsCode and decor.ralNr and decor.colorCode %}
  55.                                 {# TK #}
  56.                                 <br> {{ 'detail-decor.NCS-RAL-CMYK' | trans }}
  57.                             {% endif %}
  58.                         </div>
  59.                     {% endif %}
  60.                 {% endif %}
  61.                 {% if content %}
  62.                     <div class="mb-4">
  63.                         {{ content|raw }}
  64.                     </div>
  65.                 {% endif %}
  66.                 {% if not isDecor and not isSurface %}
  67.                     {% if featureItems %}
  68.                         <ul class="list-unstyled row gy-3 vertical-gutter mt-md-3 mt-2">
  69.                             {% for item in featureItems %}
  70.                                 <li class="col-6">
  71.                                     {{ include('includes/utils/icon-text.html.twig', {
  72.                                         item: item,
  73.                                     }) }}
  74.                                 </li>
  75.                             {% endfor %}
  76.                         </ul>
  77.                     {% endif %}
  78.                 {% endif %}
  79.                 {% if deliveryProgramLink %}
  80.                     <div class="mb-4">
  81.                         <a href="{{ deliveryProgramLink }}" class="btn btn-outline-primary btn-pdf w-100 mt-4"><span
  82.                                 class="icon icon-info me-2"
  83.                                 aria-hidden="true"></span> {{ 'product.supply-range-button'|trans }}
  84.                         </a>
  85.                     </div>
  86.                 {% endif %}
  87.                 {% if isDecor and relatedSurfaces is not empty %}
  88.                     {% set showCountryDisclaimer = true %}
  89.                     <div class="mb-4 js-show-all">
  90.                         <b>{{ 'detail-sidebar.Surfaces' |trans }}</b>
  91.                         <div class="d-flex flex-wrap gap-2 show-all__content js-show-all__content" data-show-all-max-height="76" data-show-all-max-height-mobile="56">
  92.                             {% for surface in relatedSurfaces %}
  93.                                 <a href="{{ linkGenerator(surface) }}"
  94.                                    class="btn btn-outline-primary px-2 py-0">{{ surface.title }}</a>
  95.                             {% endfor %}
  96.                         </div>
  97.                         <button type="button" class="btn-no-styling show-all__btn js-show-all__btn fst-italic text-gray-650 d-none mt-1">
  98.                             <span class="show-all__btn-open">{{ 'detail-sidebar.show all' | trans }} ({{ relatedSurfaces | length }})</span>
  99.                             <span class="show-all__btn-close">{{ 'detail-sidebar.show less' | trans }}</span>
  100.                         </button>
  101.                     </div>
  102.                 {% endif %}
  103.                 {% if isSurface and relatedDecors is not empty %}
  104.                     {% set showCountryDisclaimer = true %}
  105.                     <div class="mb-4 js-show-all">
  106.                         <b>{{ 'detail-sidebar.Decors' |trans }}</b>
  107.                         <div class="d-flex flex-wrap gap-2 show-all__content js-show-all__content" data-show-all-max-height="76" data-show-all-max-height-mobile="56">
  108.                             {% for decor in relatedDecors %}
  109.                                 <a href="{{ linkGenerator(decor) }}"
  110.                                    class="btn btn-outline-primary px-2 py-0">{{ decor.decorNr }} {{ decor.webTitle ?? decor.title }}</a>
  111.                             {% endfor %}
  112.                         </div>
  113.                         <button type="button" class="btn-no-styling show-all__btn js-show-all__btn fst-italic text-gray-650 d-none mt-1">
  114.                             <span class="show-all__btn-open">{{ 'detail-sidebar.show all' | trans }} ({{ relatedDecors | length }})</span>
  115.                             <span class="show-all__btn-close">{{ 'detail-sidebar.show less' | trans }}</span>
  116.                         </button>
  117.                     </div>
  118.                 {% endif %}
  119.                 {% if relatedMaterialGroups is not empty%}
  120.                     {% set showCountryDisclaimer = true %}
  121.                     <div class="mb-4 js-show-all">
  122.                         <b>{{ 'detail-sidebar.materialGroups'|trans }}</b>
  123.                         <div class="d-flex flex-wrap gap-2 show-all__content js-show-all__content" data-show-all-max-height="76" data-show-all-max-height-mobile="56">
  124.                             {% for materialGroup in relatedMaterialGroups %}
  125.                                 {% if materialGroup.relatedDocument %}
  126.                                     <a href="{{ materialGroup.relatedDocument.fullPath }}"
  127.                                        class="btn btn-outline-primary px-2 py-0">{{ materialGroup.title }}</a>
  128.                                 {% else %}
  129.                                     <span
  130.                                         class="btn btn-outline-primary px-2 py-0 pe-none">{{ materialGroup.title }}</span>
  131.                                 {% endif %}
  132.                             {% endfor %}
  133.                         </div>
  134.                         <button type="button" class="btn-no-styling show-all__btn js-show-all__btn fst-italic text-gray-650 d-none mt-1">
  135.                             <span class="show-all__btn-open">{{ 'detail-sidebar.show all' | trans }} ({{ relatedMaterialGroups | length }})</span>
  136.                             <span class="show-all__btn-close">{{ 'detail-sidebar.show less' | trans }}</span>
  137.                         </button>
  138.                     </div>
  139.                 {% endif %}
  140.                 {% if showCountryDisclaimer %}
  141.                     <div class="mb-4">
  142.                         <span>{{ 'detail-sidebar.countryDisclaimer'|trans }}</span>
  143.                     </div>
  144.                 {% endif %}
  145.             </div>
  146.             <form action="/404" data-action="{{ app.request.pathInfo }}?ajax=1&update=1" class="js-cart__form"
  147.                   data-cart-one-add="true">
  148.                 <input type="hidden" name="productId" value="123">
  149.                 <div class="box-details__footer row g-0">
  150.                     <!-- Varianten für mögliche Konstellationen, je nachdem welchen Button es gibt/nicht gibt -->
  151.                     {% if contactButton and cartButton and siteConfig().contactPage %}
  152.                         <div class="col-6">
  153.                             {{ _self.contactButton(event) }}
  154.                         </div>
  155.                         <div class="col-6">
  156.                             {{ _self.cartButton() }}
  157.                         </div>
  158.                     {% elseif contactButton and siteConfig().contactPage %}
  159.                         <div class="col-12">
  160.                             {{ _self.contactButton(event) }}
  161.                         </div>
  162.                     {% elseif(cartButton) %}
  163.                         <div class="col-12">
  164.                             {{ _self.cartButton() }}
  165.                         </div>
  166.                     {% endif %}
  167.                 </div>
  168.             </form>
  169.         {% if characteristics %}
  170.             {{ include('includes/title-blocks/title-block.html.twig', {
  171.                 title: 'surface.characteristics' | trans,
  172.                 titleTag:'h2',
  173.                 titleStyle:'h3 mt-4',
  174.             }, with_context = false) }}
  175.             <ul class="list-unstyled d-flex flex-wrap gap-3">
  176.                 {% for characteristic in characteristics %}
  177.                     {% if characteristic.icon %}
  178.                         <li style="height: fit-content;">
  179.                             <span title="{{ characteristic.title }}" class="icon icon-{{ characteristic.icon }} icon-5x" aria-hidden="true"></span>
  180.                         </li>
  181.                     {% endif %}
  182.                 {% endfor %}
  183.             </ul>
  184.         {% endif %}
  185.     </section>
  186. </div>
  187. {% macro cartButton() %}
  188.     <button type="submit" class="btn btn-primary btn--no-transition w-100 btn-cart js-cart__add">
  189.         <span class="btn__text btn-cart__default">{{ 'detail-sidebar.order preview'|trans }}</span>
  190.         <span class="btn-cart__added">
  191.             <span class="btn-cart__added-icon icon icon-check" aria-label="Added" aria-hidden="true"></span>
  192.             <span class="btn-cart__added-text">{{ 'detail-sidebar.added'|trans }}</span>
  193.         </span>
  194.         {{ include('loading/loading-overlay.html.twig', {className: 'loading-overlay--centered loading-overlay--btn js-cart__loading', text: null}) }}
  195.     </button>
  196. {% endmacro %}
  197. {% macro contactButton(event) %}
  198.     <a class="btn btn-outline-primary btn--no-transition w-100 js-smoothscroll__link"
  199.        href="{{ siteConfig().contactPage }}"
  200.         {% if event == 'click_cta_infobox' %}
  201.             data-event-tracking-event="{{ event }}"
  202.             data-event-tracking-click_text="{{ 'detail-sidebar.to contactFrom'|trans }}"
  203.             data-event-tracking-click_url="{{ siteConfig().contactPage }}"
  204.         {% endif %}
  205.     ><span
  206.             class="btn__text">{{ 'detail-sidebar.to contactFrom'|trans }}</span></a>
  207. {% endmacro %}