src/Elements/Bundle/DemiFrontendBundle/Resources/views/Accommodation/detail.desktop.html.twig line 1

Open in your IDE?
  1. {% if not editmode %}
  2.     {% do elements_head_title().setTitle( demi_seoTitleForAcco(accommodation,document), true ) %}
  3.     {% do elements_head_meta().setDescription( demi_seoDescriptionforAcco(accommodation), true )  %}
  4. {% endif %}
  5. {#{% set canonicalUrl = demi_demiUrl({#}
  6. {#    'accommodation': accommodation#}
  7. {#},'demi_acco_detail_page',true) %}#}
  8. {% set canonicalUrl = linkGenerator().generate(accommodation, {canonical: true, relative: false, reset: true}) %}
  9. {% do elements_canonical().checkAllParams(false).setDomain(canonicalUrl)|raw %}
  10. {%  do demi_paymentSetDefaultCurrency(accommodation) %}
  11.  {% if not canonicalUrl is same as(app.request.pathInfo) %}
  12.      {% do elements_robots().setNoIndex(true) %}
  13.  {% endif %}
  14. {% set address = accommodation.getAddress() %}
  15. {% set maxRatingValue = demi_core_configuration('getMaxRatingValue',[]) ?: 5 %}
  16. {% set maxRatingNormalized = demi_core_configuration('getMaxRatingNormalized',[]) ?: 5 %}
  17. {% set hasRatingWidget = demi_ratingGetHasRatingWidgetTrustYou(accommodation) %}
  18. {% set resultSetPresent = false %}
  19. {% if accommodationResultSet is defined and accommodationResultSet is not null and accommodationResultSet.getMinPriceProductSets is not empty and accommodationResultSet.getMinPriceProductSets()|length > 0 %}
  20.     {% set resultSetPresent = true %}
  21. {% endif %}
  22. {% set ajaxUrl = demi_demiUrl({
  23.     'accommodation': accommodation
  24. },'demi_acco_ajax') %}
  25. {% if  '?' in ajaxUrl %}
  26.     {% set parts = ajaxUrl|split('?') %}
  27.     {% set ajaxUrl = parts[0] %}
  28. {% endif %}
  29. {% set liveDetailProductsUrl = ajaxUrl ~ "?ajaxRequestType=getLiveDetailProducts" %}
  30. {% set corridorMatrixUrl = ajaxUrl ~ "?ajaxRequestType=getCorridorMatrix" %}
  31. {% set productUrl = ajaxUrl ~ "?ajaxRequestType=getProductByIdAndMealcode" %}
  32. {% set paymentInformationUrl = ajaxUrl ~ "?ajaxRequestType=getProductByIdAndMealcode" %}
  33. {% set step1Url = demi_demiUrl({
  34.     'path': demi_core_configuration('getCheckoutPath',[]).getFullPath(),
  35.     'controller': 'cart',
  36.     'action': 'step1'
  37. },'demi_checkout',true) %}
  38. {% set addToCartUrl = step1Url %}
  39. {% set anchors = {
  40.     'detail': '#details',
  41.     'picture': '#pictures',
  42.     'package': '#packages',
  43.     'rooms': '#rooms',
  44.     'rating': '#ratings'
  45. } %}
  46. {% if activeTab is defined and activeTab not in anchors %}
  47.     {% set activeTab = '#details' %}
  48. {% else %}
  49.     {% do jsConfig('_initialState').add({'activeTab': activeTab}) %}
  50. {% endif %}
  51. {% if not availabilityIsChecked %}
  52.     {% set fromDate = null %}
  53. {% else %}
  54.     {% set fromDate = demi_getSearchFrom() %}
  55. {% endif %}
  56. {% set imagesTypes = demi_getAccoImagesTypesAsArray(accommodation) %}
  57. {% set imageList = accommodation.getImages(imagesTypes, fromDate, true) %}
  58. {% set photoCount = imageList|length %}
  59. {% set videoCount = impressionLinks["video"]|length %}
  60. {% set panoCount = impressionLinks["pano"]|length %}
  61. {% set classifications = accommodation.getClassifications() %}
  62. {% set hasClassificationsWithIcons = false %}
  63. {% for classification in classifications %}
  64.     {% set group = classification.getClassificationGroup() %}
  65.     {% if group is not empty and group.getIconSmall() %}
  66.         {% set hasClassificationsWithIcons = true %}
  67.     {% endif %}
  68. {% endfor %}
  69. {% if imageList is not empty %}
  70.     {% do elements_opengraph().addImage(imageList[0].getThumbnail('slider-main').getPath()) %}
  71. {% endif %}
  72. {% set jsonLdData = demi_getAccommodationJsonLdData(accommodation, options is defined ? options : [], packages is defined ? packages : null) %}
  73. {% do jsonLd().add("accommodation", jsonLdData) %}
  74. {% extends '@ElementsDemiFrontend/Layout/layout.html.twig' %}
  75. {% block content %}
  76.     {# TODO @msteyrer breadcrumb helper bundle not in use atm
  77.     {% do breadcrumbHelper().set({
  78.         'parentId': document.getId(),
  79.         'url': accoUrlPlain,
  80.         'label': accommodation.getName()
  81.     }) %}
  82.     {{ include('@ElementsDemiFrontend/Navigation/breadcrumb.html.twig') }} #}
  83.     <script type="text/javascript" data-cookieconsent="ignore">
  84.         _config.viewType = "acco";
  85.         _config.historyController = true;
  86.         _config.roomSelection = true;
  87.         _config.searchData = true;
  88.         _config.detailResultUrl = '{{ liveDetailProductsUrl|raw }}';
  89.         _config.corridorSearchUrl = '{{ corridorMatrixUrl|raw }}';
  90.         _config.detailPaymentInfoUrl = '{{ paymentInformationUrl|raw }}';
  91.         _config.detailProductUrl = '{{ productUrl|raw }}';
  92.         _config.addToCartUrl = '{{ addToCartUrl|raw }}';
  93.         _config.cartWarningOnMultipleAccoProducts = {{  demi_core_configuration('getWarningOnMultipleAccoProducts',[]) ? 'true': 'false' }};
  94.         _config.cartInfoUrl = '{{ demi_checkoutUrl('cart','hasAccoInCart')|raw }}';
  95.         _config.roomList = true;
  96.         _config.paramTabs = true;
  97.         _config.trackingCountingClicksUrl='{{ countingClicksUriJs|raw }}';
  98.         _config.productData = {
  99.             id: {{ accommodation.getId() }},
  100.             name: "{{ demi_impressionName(accommodation) }}",
  101.             category: "{{ demi_impressionCategory(accommodation, null, searchParam) }}",
  102.             brand: "{{ demi_impressionBrand(accommodation) }}"
  103.         };
  104.         _config.acommodationMapHideBusinesses = {{ demi_core_configuration('getMapHideBusinesses',[]) ? 'true' : 'false' }};
  105.         {% set mealtypeId = searchParam.getMealTypeId()   %}
  106.         {% if mealtypeId is not empty and mealtypeId[0] is not empty %}
  107.         _config.urlParams = _config.urlParams || [];
  108.         _config.urlParams.push( { name : "mealtype", value : "{{ mealtypeId[0] }}"} );
  109.         {% endif %}
  110.         {% if searchParam.getBookOnly() %}
  111.         _config.urlParams = _config.urlParams || [];
  112.         _config.urlParams.push( { name : "bookonly", value : "on"} );
  113.         {% endif %}
  114.     </script>
  115.     {{ include('@ElementsDemiFrontend/Includes/canonicalOverride.html.twig', {'object' : accommodation }) }}
  116.     {{ include('@ElementsDemiFrontend/Includes/tags/detail-acco.html.twig',
  117.         {
  118.             'isMobile': false,
  119.             'acco': accommodation,
  120.             'searchParam': searchParam,
  121.             'accoResultSet': accommodationResultSet,
  122.             'productResultSet': productResultSet,
  123.             'packages': packages is defined ? packages : null,
  124.             'sortedMarketingGroups': sortedMarketingGroups,
  125.             'sortedFacilities': sortedFacilities,
  126.             'sortedHealthMeasures':sortedHealthMeasures,
  127.             'hasHousePackages': hasHousePackages,
  128.             'photoCount': photoCount,
  129.             'videoCount': videoCount,
  130.             'panoCount': panoCount
  131.         }
  132.     ) }}
  133.     <main id="main" role="main">
  134.         <div hidden>
  135.             {{ include('@ElementsDemiFrontend/Accommodation/lightboxTopbar.html.twig') }}
  136.         </div>
  137.         {% set headerName = "full" %}
  138.         {% set width = 0 %}
  139.         {% set forceMultiHeader = accommodation.getForceMultiHeader() %}
  140.         {% if accommodation.getFirstImage(null,fromDate) is not empty %}
  141.             {% set width = accommodation.getFirstImage(null, fromDate).getCustomSettings()["imageWidth"] %}
  142.         {% endif %}
  143.         {% if width < demi_core_configuration("getMinWidthForFullHeader",[]) or forceMultiHeader %}
  144.             {% set headerName = "multi-image" %}
  145.         {% endif %}
  146.         {%  if imageList|length >= 3  or headerName=="full" %}
  147.             {% set heroImageAlt = accommodation.getName() ~ ' - Impression #1' %}
  148.             {{ include('@ElementsDemiFrontend/Accommodation/includes/acco-header-' ~ headerName ~'.desktop.html.twig',
  149.                 {
  150.                     'photoCount': photoCount,
  151.                     'videoCount': videoCount,
  152.                     'panoCount': panoCount,
  153.                     'imageList': imageList,
  154.                     'alt': heroImageAlt
  155.                 }
  156.             ) }}
  157.         {% endif %}
  158.         {{ include('@ElementsDemiFrontend/Includes/elements/search-info.desktop.html.twig', { "searchParam": searchParam, "availabilityIsChecked": availabilityIsChecked, "isSearch": false}) }}
  159.         <div class="container mt-5">
  160.             <div class="row">
  161.                 <div class="col-xl-9 col-12">
  162.                     <div class="row mb-5">
  163.                         <div class="col">
  164.                             {% if accommodation.getIsTesthotel() %}
  165.                                 <div class="demi-test-acco-notice mb-3 text-danger"><strong>Testbetrieb</strong> nur für Debug/aktive Pimcore User sichtbar</div>
  166.                             {% endif %}
  167.                             <h1 class="text-primary{{ hasClassificationsWithIcons ? ' mb-2' : ' mb-4' }}">{{ demi_getAccoNameWithStars(accommodation) }}</h1>
  168.                             {% set i = 0 %}
  169.                             {% set len = classifications|length %}
  170.                             {% for classification in classifications %}
  171.                                 <div class="row{{ i == (len - 1) ? ' mb-4' : ' mb-2' }}">
  172.                                     <div class="col col-auto">
  173.                                         {% set count = classification.getClassificationGroupAmount() %}
  174.                                         {% if count is not empty and classification.getShowAsIcon() and classification.demiGetIcon() is not null %}
  175.                                             <span class="classification_holder hidden-xs" aria-label="{{ count }} {{ classification.getName() }}">
  176.                                                 {%  for c in 1..count %}
  177.                                                     {% set thumbnail = classification.demiGetIcon().getThumbnail('demi-classification') %}
  178.                                                     {{  thumbnail.getHTML()|raw }}
  179.                                                     {% if classification.getIsSuperior() %}
  180.                                                         <span class="classification-superior">S</span>
  181.                                                     {% endif %}
  182.                                                 {% endfor %}
  183.                                         </span>
  184.                                         {% endif %}
  185.                                     </div>
  186.                                 </div>
  187.                                 {% set i = i+1 %}
  188.                             {% endfor %}
  189.                             <div class="row mb-2">
  190.                                 <div class="col col-auto">
  191.                                     {{ accommodation.getCategoryNames(2) }}
  192.                                 </div>
  193.                                 <div class="col col-auto">
  194.                                     <div class="media text-muted">
  195.                                         <script>
  196.                                             _config.smoothScroll = true;
  197.                                         </script>
  198.                                         <a class="media text-muted js-smoothscroll__link" href="#acco-contact">
  199.                                             {% if accommodation.getTown() is not null and (accommodation.getTown().getNameLocalized(app.request.locale) or  accommodation.getTown().getName()) %}
  200.                                                 <div class="demi-icon demi-icon-marker mr-1 icon-in-text" title="{{ 'demi.list.town'|trans }}" aria-label="{{ 'demi.list.town'|trans }}"></div>
  201.                                                 <div class="media-body">
  202.                                                     {{ accommodation.getTown().getNameLocalized(app.request.locale) ?? accommodation.getTown().getName() }}
  203.                                                 </div>
  204.                                             {% elseif  accommodation.getDistrict() is not null and (accommodation.getDistrict().getNameLocalized(app.request.locale) or  accommodation.getDistrict().getName())%}
  205.                                                 <div class="demi-icon demi-icon-marker mr-1 icon-in-text" title="<?= $this->translate('demi.list.town'?>" aria-label="<?= $this->translate('demi.list.town'?>"></div>
  206.                                                 <div class="media-body">
  207.                                                     {{ accommodation.getDistrict().getNameLocalized(app.request.locale) ?? accommodation.getDistrict().getName() }}
  208.                                                 </div>
  209.                                             {% elseif address and address.getTown() %}
  210.                                                 <div class="demi-icon demi-icon-marker mr-1 icon-in-text" title="{{ 'demi.detail.town'|trans }} ?>" aria-label="{{ 'demi.detail.town'|trans }}"></div>
  211.                                                 <div class="media-body">
  212.                                                     {{ address.getTown() }}
  213.                                                 </div>
  214.                                             {% endif %}
  215.                                         </a>
  216.                                     </div>
  217.                                 </div>
  218.                                 <div class="col col-auto">
  219.                                     {% if distance is defined %}
  220.                                         <div class="media text-muted">
  221.                                             <span class="badge badge-primary mr-1">{{ distance['value'] }}</span>
  222.                                             <div class="media-body">
  223.                                                 <span class="text-primary">{{ distance['from'] }}</span>
  224.                                             </div>
  225.                                         </div>
  226.                                     {% endif %}
  227.                                 </div>
  228.                             </div>
  229.                         </div>
  230.                         <div class="col col-auto">
  231.                             <div  class="mb-4">
  232.                                 {{ include('@ElementsDemiFrontend/Accommodation/includes/serviceprovider-logo.html.twig', {
  233.                                     "logo": accommodation.getImages([constant('Elements\\Demi\\Deskline\\Constant\\DocumentInterface::DOCUMENT_TYPE_SERVICE_PROVIDER_LOGO')])|first
  234.                                 }) }}
  235.                             </div>
  236.                             <div>
  237.                                 {% if accommodation.getRatingSystem()=="TrustYou" %}
  238.                                     {% set normalizedRating = demi_ratingGetNormalized(accommodation, maxRatingValue, maxRatingNormalized) %}
  239.                                     {% if normalizedRating is not empty %}
  240.                                         {{ include('@ElementsDemiFrontend/Accommodation/includes/rating-md.html.twig', {
  241.                                             "score": normalizedRating,
  242.                                             "text": accommodation.getRatingScoreDescription(),
  243.                                             "styleModifier": "mb-1",
  244.                                             "showReviewCount": true,
  245.                                             "ratingCount": accommodation.getRatingCountDirect(),
  246.                                             "isTextWhite" : false
  247.                                         }) }}
  248.                                     {% endif %}
  249.                                 {% endif %}
  250.                             </div>
  251.                         </div>
  252.                         <div class="col col-auto">
  253.                             <div class="row">
  254.                                 <div class="col col-auto d-xl-none d-md-block">
  255.                                     <div class="ml-3" aria-live="polite">
  256.                                         <div class="js-room-list__loading js-corridor__search-info-loading--compact" hidden>
  257.                                             <div class="text-center py-3">
  258.                                                 {{ include('@ElementsDemiFrontend/Includes/elements/spinner/loading-spinner.html.twig') }}
  259.                                             </div>
  260.                                         </div>
  261.                                         <div class="js-room-list__content js-corridor__search-info-content--compact" data-list="searchInfoCompact">
  262.                                             {{ include('@ElementsDemiFrontend/Accommodation/searchInfoBoxCompact.desktop.html.twig', {
  263.                                                 "accommodationResultSet": accommodationResultSet,
  264.                                                 "productResultSet": productResultSet,
  265.                                                 "accommodation": accommodation,
  266.                                             }) }}
  267.                                         </div>
  268.                                     </div>
  269.                                 </div>
  270.                             </div>
  271.                         </div>
  272.                     </div>
  273.                     <script data-cookieconsent="ignore">
  274.                         _config.loadAccoImages = true;
  275.                     </script>
  276.                     <div class="mt-3">
  277.                         <ul class="nav nav-border-tabs" role="tablist">
  278.                             <li class="nav-item">
  279.                                 <a class="nav-link js-param-tab{{ activeTab == anchors['detail'] ? ' active' : '' }} js-tracking js-tracking--click"
  280.                                    href="{{ anchors['detail'] }}"
  281.                                    data-toggle="tab"
  282.                                    role="tab"
  283.                                    aria-expanded="{{ activeTab == anchors['detail'] ? 'true' : 'false' }}"
  284.                                    data-tracking-category="button"
  285.                                    data-tracking-action="detail"
  286.                                    data-tracking-label="{{ accommodation.getName()|escape }}">
  287.                                     {{ "demi.detail.tab.overview"|trans }}
  288.                                 </a>
  289.                             </li>
  290.                             {% if(hasRatingWidget) %}
  291.                                 <li class="nav-item">
  292.                                     <a class="nav-link js-param-tab{{ activeTab == anchors['rating'] ? ' active' : '' }} js-tracking js-tracking--click"
  293.                                        href="{{ anchors['rating'] }}"
  294.                                        data-toggle="tab"
  295.                                        role="tab"
  296.                                        aria-expanded="{{ activeTab == anchors['rating'] ? 'true' : 'false' }}"
  297.                                        data-tracking-category="button"
  298.                                        data-tracking-action="rating"
  299.                                        data-tracking-label="{{ accommodation.getName()|escape }}">
  300.                                         {{ "demi.detail.tab.ratings"|trans }}
  301.                                     </a>
  302.                                 </li>
  303.                             {% endif %}
  304.                             <li class="nav-item">
  305.                                 <a class="nav-link js-param-tab js-acco-images__tab{{ activeTab == anchors['picture'] ? ' active' : '' }} js-tracking js-tracking--click"
  306.                                    href="{{ anchors['picture'] }}"
  307.                                    data-toggle="tab"
  308.                                    role="tab"
  309.                                    aria-expanded="{{ activeTab == anchors['picture'] ? 'true' : 'false' }}"
  310.                                    data-tracking-category="button"
  311.                                    data-tracking-action="picture"
  312.                                    data-tracking-label="{{ accommodation.getName()|escape }}">
  313.                                     {% if videoCount == 0 %}
  314.                                         {{ "demi.detail.tab.photos"|trans }}
  315.                                     {% else %}
  316.                                         {{ "demi.detail.tab.photos-videos"|trans }}
  317.                                     {% endif %}
  318.                                 </a>
  319.                             </li>
  320.                             {% if hasHousePackages is not empty or (destinationPackages is not empty and destinationPackages|length>0 and demi_core_configuration('getShowDestinationPackagesOnAccoDetail',[])) %}
  321.                                 <li class="nav-item">
  322.                                     <a class="nav-link js-param-tab{{ activeTab == anchors['package'] ? ' active' : '' }} js-tracking js-tracking--click"
  323.                                        href="{{ anchors['package'] }}"
  324.                                        data-toggle="tab"
  325.                                        role="tab" aria-expanded="{{ activeTab == anchors['package'] ? 'true' : 'false' }}"
  326.                                        data-tracking-category="button"
  327.                                        data-tracking-action="package"
  328.                                        data-tracking-label="{{ accommodation.getName()|escape }}">
  329.                                         {{ "demi.detail.tab.packages"|trans }}
  330.                                     </a>
  331.                                 </li>
  332.                             {% endif %}
  333.                             {% if (accommodation.getAccommodations(false)|length)>0 %}
  334.                                 <li class="nav-item">
  335.                                     <a class="nav-link js-param-tab{{ activeTab == anchors['rooms'] ? ' active' : '' }} js-tracking js-tracking--click"
  336.                                        href="{{ anchors['rooms'] }}"
  337.                                        data-toggle="tab"
  338.                                        role="tab"
  339.                                        aria-expanded="{{ activeTab == anchors['rooms'] ? 'true' : 'false' }}"
  340.                                        data-tracking-category="button"
  341.                                        data-tracking-action="{{ demi_getRoomsTabTranslationKey(accommodation)|trans }} & {{ "demi.detail.tab.prices"|trans }}"
  342.                                        data-tracking-label="rooms">
  343.                                         {{ demi_getRoomsTabTranslationKey(accommodation)|trans }} & {{ "demi.detail.tab.prices"|trans }}
  344.                                     </a>
  345.                                 </li>
  346.                             {% endif %}
  347.                         </ul>
  348.                     </div>
  349.                     <div class="pb-4 pt-2">
  350.                         <div class="tab-content">
  351.                             <div class="tab-pane pt-2{{ activeTab == anchors['detail'] ? ' active' : '' }}" id="details" role="tabpanel">
  352.                                 {{ include("@ElementsDemiFrontend/Accommodation/includes/acco-details.desktop.html.twig" ,{
  353.                                     'package': false,
  354.                                     'address': address,
  355.                                     'photoCount': photoCount,
  356.                                     'availabilityIsChecked': availabilityIsChecked,
  357.                                     'fromDate': fromDate,
  358.                                     'accommdationResultSet': accommodationResultSet
  359.                                 }) }}
  360.                             </div>
  361.                             {% if hasRatingWidget %}
  362.                                 <div class="tab-pane pt-2{{ activeTab == anchors['rating'] ? ' active' : '' }}" id="ratings" role="tabpanel">
  363.                                     {{ include("@ElementsDemiFrontend/Accommodation/includes/acco-ratings.desktop.html.twig", {'hasRatingWidget': hasRatingWidget, 'package' : false}) }}
  364.                                 </div>
  365.                             {% endif %}
  366.                             <div class="tab-pane pt-2{{ activeTab == anchors['picture'] ? ' active' : '' }}" id="pictures" role="tabpanel">
  367.                                 {{ include("@ElementsDemiFrontend/Accommodation/includes/acco-pictures.desktop.html.twig", {
  368.                                     'photoCount': photoCount,
  369.                                     'videoCount': videoCount,
  370.                                     'panoCount': panoCount,
  371.                                     'impressionsLinks': impressionLinks,
  372.                                     'fromDate': fromDate,
  373.                                     'imageList': imageList,
  374.                                     'accoId': accommodation.getId(),
  375.                                     'package' : false
  376.                                 }) }}
  377.                             </div>
  378.                             {% if hasHousePackages or (destinationPackages is not empty  and (destinationPackages|length)>0  and demi_core_configuration("getShowDestinationPackagesOnAccoDetail",[])) %}
  379.                                 <div class="tab-pane pt-2{{ activeTab == anchors['package'] ? ' active' : '' }}" id="packages" role="tabpanel">
  380.                                     {{ include('@ElementsDemiFrontend/Accommodation/includes/acco-packages.desktop.html.twig') }}
  381.                                 </div>
  382.                             {% endif %}
  383.                             {% if (accommodation.getAccommodations(false)|length)>0 %}
  384.                                 <div class="tab-pane pt-2{{ activeTab == anchors['rooms'] ? ' active' : '' }}" id="rooms" role="tabpanel">
  385.                                     {{ include('@ElementsDemiFrontend/Accommodation/includes/acco-rooms.html.twig', {
  386.                                         'availabilityIsChecked': availabilityIsChecked,
  387.                                         'resultSetPresent': resultSetPresent,
  388.                                         'package' : null,
  389.                                         'tvbPackage' : null,
  390.                                         'housePackageMaster' : null
  391.                                     }) }}
  392.                                 </div>
  393.                             {% endif %}
  394.                         </div>
  395.                     </div>
  396.                 </div>
  397.                 {{ include("@ElementsDemiFrontend/Accommodation/includes/acco-sidebar.desktop.html.twig",{
  398.                     'accommodationResultSet': accommodationResultSet,
  399.                     'isPackage': false,
  400.                 }) }}
  401.             </div>
  402.         </div>
  403.     </main>
  404.     {% if demi_core_configuration("getDisableEnquiry",[])!=true and accommodation.getAddress() is not empty and accommodation.getAddress().getEmail() is not empty %}
  405.         {{ include('@ElementsDemiFrontend/Includes/overlays/inquiry-overlay.html.twig', {
  406.             'accommodation': accommodation,
  407.             'searchParams': searchParam,
  408.             'user': user
  409.         }) }}
  410.     {% endif %}
  411.     {% if demi_core_configuration('getWarningOnMultipleAccoProducts',[]) %}
  412.         {{ include('@ElementsDemiFrontend/Includes/modals/warningOnMultipleAccoProductsModal.html.twig', {'cartUrl': step1Url}) }}
  413.     {% endif %}
  414. {% endblock %}