templates/Slivki/mobile/offer/details.html.twig line 1

Open in your IDE?
  1. {% set phoneNumbersWithoutGeoLocations = offer.getPhoneNumbersWithoutGeoLocations() %}
  2. {% extends 'Slivki/mobile/base.html.twig' %}
  3. {% block styles %}
  4.     <link rel="stylesheet" href="/css/swiper/swiper.min.css"/>
  5.     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.3.5/jquery.fancybox.min.css"/>
  6.     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.css"/>
  7.     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick-theme.min.css"/>
  8.     <link rel="stylesheet" href="/admin/plugins/datetimepicker/css/bootstrap-datetimepicker.min.css">
  9.     <link rel="stylesheet" href="/admin/plugins/datatables/jquery.dataTables.min.css"/>
  10.     <link rel="stylesheet" href="/admin/plugins/colorpicker/bootstrap-colorpicker.min.css"/>
  11.     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.css">
  12.     {{ parent() }}
  13.     <link href="/css/delivery.min.css?v={{ delivery_css_version }}" rel="stylesheet" type="text/css"/>
  14.     <link href="/mobile/css/offers.min.css?v={{ mobile_offers_css }}" rel="stylesheet" type="text/css"/>
  15.     <link href="/css/foodForGift.css?v={{ food_for_gift_css }}" rel="stylesheet" type="text/css"/>
  16.     <link href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap"
  17.           rel="stylesheet">
  18.     <link href=" /mobile/css/statistics_modal.css?v=3" rel="stylesheet" type="text/css"/>
  19. {% endblock %}
  20. {% block messenger %}{% endblock %}
  21. {% block ogimage %}
  22.     {% if detailMediaList|length > 0 %}
  23.         <meta property="og:image"
  24.               content="{{ app.request.getSchemeAndHttpHost() }}{{ getImageURL(detailMediaList|first, 522, 322) }}"/>
  25.         <meta property="og:image:width" content="522"/>
  26.         <meta property="og:image:height" content="322"/>
  27.     {% else %}
  28.         {{ parent() }}
  29.     {% endif %}
  30. {% endblock %}
  31. {% set isBatchCodesAllowed = app.user and app.user.isBatchCodesAllowed %}
  32. {% block content %}
  33.     {% set isPickupEnabled = offer.getOnlineOrderSettings().isPickupEnabled() is defined ? offer.getOnlineOrderSettings().isPickupEnabled() %}
  34.     {% set isDeliveryEnabled = offer.getOnlineOrderSettings().isDeliveryEnabled() is defined ? offer.getOnlineOrderSettings().isDeliveryEnabled() %}
  35.     {% if parentCategoryList %}
  36.         {% include 'Slivki/mobile/breadcrumbs.html.twig' with { 'parentCategoryList': parentCategoryList, 'supplierCategoryData': offer.getSupplierCategoryData() } only %}
  37.     {% endif %}
  38.     {% if isPickupEnabled or isDeliveryEnabled %}
  39.         <input id="deliveryMethodEnabled" type="hidden" value="{{ isDeliveryEnabled == '' ? '2' : '1' }}">
  40.     {% endif %}
  41.     <input id="offerPage" type="hidden" value="">
  42.     <input id="offerID" type="hidden" value="{{ offer.getID() }}">
  43.     <input id="isMedicalCenter" type="hidden"
  44.            value="{{ parentCategoryList and parentCategoryList[0].getID() == constant('Slivki\\Entity\\Category::MEDICAL_CENTER_CATEGORY_ID') }}">
  45.     <input type="hidden" id="stock-id" value="{{ offer.getID() }}">
  46.     <input type="hidden" id="stock-link" value="{{ app.request.getSchemeAndHttpHost() ~ app.request.getRequestUri() }}">
  47.     <div type="hidden" id="mobileVersionIndicator"></div>
  48.     {% if app.user and isSubscriber(app.user) %}
  49.         <input id="allowedCodesCountBySubscription" type="hidden" value="{{ allowedCodesCountBySubscription }}">
  50.     {% endif %}
  51.     {% if app.user %}
  52.         <input id="splitTotalCodesCountByUser" type="hidden" value="{{ app.user.getCodesCountByOffer(offer) }}">
  53.         <input type="hidden" id="customerID" value="{{ app.user.getID() }}"/>
  54.     {% endif %}
  55.     <meta content="{{ metaInfo.metaDescription }}"/>
  56.     <div id="offerDetails">
  57.         <div class="collapse-more-button"></div>
  58.         {% set isOfferFavourite = app.user ? app.user.isOfferFavourite(offer) : false %}
  59.         <div class="no-gutters pb-2">
  60.             <div class="col-12 col-sm-4">
  61.                 <div id="offerImageSlider" class="m-0 swiper-container">
  62.                     <div class="back-button" onclick="history.back();">
  63.                         <img src="/images/back-violet.svg"/>
  64.                     </div>
  65.                     {% if app.user() %}
  66.                         <div class="fovoutite-block"
  67.                              onclick="onFavouriteClickOffer({{ offer.getID() }}, {{ isOfferFavourite ? 'true' : 'false' }})">
  68.                             <img width="18" height="18"
  69.                                  src="{{ isOfferFavourite ? '/images/heart_active.svg' : '/images/heart.svg' }}"/>
  70.                         </div>
  71.                     {% endif %}
  72.                     {% if not offer.isWithoutCodes() %}
  73.                         <div class="discount-block">
  74.                             {{ offer.getDiscount() }}
  75.                         </div>
  76.                     {% endif %}
  77.                     {% if is_granted('ROLE_ADMIN') and not offer.isWithoutCodes() %}
  78.                         <div id="statisticsButton" data-toggle="modal" data-target="#statisticOffersPopup">
  79.                             <img width="37" height="37" src="/images/statistics.png"/>
  80.                         </div>
  81.                     {% endif %}
  82.                     <div class="swiper-wrapper"
  83.                          data-pixel={{ offer.getID() == constant('Slivki\\Entity\\Offer::BETERA_OFFER_ID') ? 'https://amc.yandex.ru/show?cmn_id=26372&plt_id=194140&crv_id=464042&evt_t=render&ad_type=banner&rnd=%system.random%' }}>
  84.                         {% set medias = offer.getDetailMedias() %}
  85.                         {% set mediaCount = medias|length %}
  86.                         {% if mediaCount > 1 %}
  87.                             {% for media in medias %}
  88.                                 <div class="swiper-slide">
  89.                                     {% if media.isYoutube() %}
  90.                                         <input class="js-src-video" type="hidden" value="https://www.youtube.com/embed/{{ media.getName() }}">
  91.                                     {% else %}
  92.                                         <img class="img-fluid lazyload" alt="{{ media.getDescription() }}"
  93.                                              src="{{ getImageURL(media, 1044, 644) }}"/>
  94.                                     {% endif %}
  95.                                 </div>
  96.                             {% endfor %}
  97.                         {% elseif mediaCount == 1 %}
  98.                             <div>
  99.                                 <img class="img-fluid lazyload" alt="{{ medias[0].getDescription() }}"
  100.                                      src="{{ getImageURL(medias[0], 1044, 644) }}"/>
  101.                             </div>
  102.                         {% endif %}
  103.                     </div>
  104.                     {% if mediaCount > 1 %}
  105.                         <div class="swiper-pagination mt-2"></div>
  106.                         <div class="swiper-button-next"></div>
  107.                         <div class="swiper-button-prev"></div>
  108.                     {% endif %}
  109.                 </div>
  110.             </div>
  111.             <div class="container-offers">
  112.                 <div class="tags-offers">
  113.                     {% if not offer.isWithoutCodes() %}
  114.                         <div class="tags-offers-item"
  115.                              data-toggle="tooltip"
  116.                              data-placement="top"
  117.                              data-html="true"
  118.                              data-original-title="Взято кодов <br> Всего <a>{{ multiplePoolOfferUsedCodesCount is defined ? multiplePoolOfferUsedCodesCount : usedCodesCount }}</a> </br> За сутки {{ todayPurchaseCount }} </br> За месяц {{ getOfferMonthlyPurchaseCount(offer.getID(), 30) }}">
  119.                             <img src="/images/offers/icon_people.svg"/>
  120.                             <p class="mb-0"><a>{{ multiplePoolOfferUsedCodesCount is defined ? multiplePoolOfferUsedCodesCount : usedCodesCount }}</a></p>
  121.                         </div>
  122.                     {% endif %}
  123.                     <div class="tags-offers-item view-count" class="view-count d-flex"
  124.                          data-toggle="tooltip"
  125.                          data-placement="top"
  126.                          data-html="true"
  127.                          data-original-title="Просмотров  </br> За сутки {{ todayVisitCount }}<br> За месяц <span class='m-0'><a>{{ visitCount }}</a></span>">
  128.                         <img src="/images/offers/statistic_1.svg"/>
  129.                         <p class="mb-0">{{ visitCount }}</p>
  130.                     </div>
  131.                     {% if not offer.isWithoutCodes() %}
  132.                         <div class="tags-offers-item"
  133.                              data-toggle="tooltip"
  134.                              data-placement="top"
  135.                              data-html="true"
  136.                              data-original-title="Кол-во продаж к кол-ву просмотров. <br> Конверсия за 30 дней">
  137.                             <img src="/images/offers/conversion.svg"/>
  138.                             <p class="mb-0">{{ getOfferConversion(offer.getID()) }}%</p>
  139.                         </div>
  140.                     {% endif %}
  141.                     <div class="tags-offers-item rating-block"
  142.                          data-html="true"
  143.                          data-toggle="tooltip"
  144.                          data-placement="top"
  145.                          data-original-title="Рейтинг компании <br> за 90 дней">
  146.                         <span>★</span>
  147.                         <p class="mb-0">{{ offer.getRating() }}</p>
  148.                     </div>
  149.                     {% if not offer.isWithoutCodes() %}
  150.                         <div class="tags-offers-item day-to-end"
  151.                              data-toggle="tooltip"
  152.                              data-placement="top"
  153.                              data-html="true"
  154.                              data-original-title="Дней до окончания <br> действия акции">
  155.                             <img src="/images/offers/icon_time.svg"/>
  156.                             <p class="mb-0">
  157.                                 {% if daysLeft > 0 %}
  158.                                     {{ daysLeft }} {{ ['день', 'дня', 'дней']|plural(daysLeft) }}
  159.                                 {% elseif daysLeft == 0 %}
  160.                                     <input type="hidden" id="daysLeft" value="{{ daysLeft }} &nbsp;"/>
  161.                                     <input type="hidden" id="hoursLeft" value="{{ hoursLeft }} &nbsp;"/>
  162.                                     <input type="hidden" id="minutesLeft" value="{{ minutesLeft }} &nbsp;"/>
  163.                                     <input type="hidden" id="secondsLeft"
  164.                                            value="{{ offer.getActiveTill().diff(date()).format('%s') }}"/>
  165.                                     <span id="hours">{{ hoursLeft }}&nbsp</span>час{{ ['', 'а', 'ов']|plural(hoursLeft) }}&nbsp;
  166.                                 {% endif %}
  167.                             </p>
  168.                         </div>
  169.                     {% endif %}
  170.                 </div>
  171.                 <p class="tittle-offers js-tittle-offer"
  172.                    style="color: {{ offer.getTitleFontColor() }};">{{ offer.getTitle()|raw }}</p>
  173.                 <div class="offers-description">
  174.                     {% if not pastOffer and offer.getFreeCodesCount() > 0 %}
  175.                         <div class="pb-3 d-flex border-bottom-gray">
  176.                             <div class="col px-0 price-services-tittle">Стоимость:</div>
  177.                             <del id="offerRegularPrice"
  178.                                  class="regular-price-offer">{{ offer.getRegularPrice() }}</del>
  179.                             &nbsp;&nbsp;
  180.                             <div class="price-services-new">{{ offer.getOfferPrice()|replace({'(': '<span id="details-offer-price">(', ')': ')</span>'})|raw }}</div>
  181.                             <input type="hidden" id="codeCost" value="{{ codeCost }}">
  182.                         </div>
  183.                     {% else %}
  184.                         <div class="card border-0 mt-3">
  185.                             <div class="card-body p-0 pl-2 text-center">
  186.                                 <i class="slivki-icon-minus-circled text-danger d-block h1 mb-0"></i>
  187.                                 Акция завершена
  188.                             </div>
  189.                         </div>
  190.                     {% endif %}
  191.                 </div>
  192.             </div>
  193.         </div>
  194.         {% if not pastOffer and offer.getFreeCodesCount() > 0 and offer.isOnlineOrderGiftEnabled() and offer.isFoodOnlineOrderAllowedOnSite() %}
  195.             <div class="col my-2">
  196.                 <a class="button-gift" data-toggle="modal" data-target="#choiceGiftModal">
  197.                     <div class="button-gift-text">
  198.                         <p class="mb-0">ЕДА В ПОДАРОК 😋</p>
  199.                         <p class="mb-0">Подарю сам или подарят мне</p>
  200.                     </div>
  201.                 </a>
  202.             </div>
  203.         {% endif %}
  204.         {% if not pastOffer and offer.isGiftCertificateOnlineOrderAllowedOnSite() and isServerFeatureEnabled(constant('Slivki\\Enum\\SwitcherFeatures::SLIVKI_PAY_FOR_CERTIFICATE'))
  205.         %}
  206.             <div class="col my-2">
  207.                 {% if app.user %}
  208.                     <a class="button-gift" href="/virtual-wallet-pay">
  209.                         <div class="button-gift-text">
  210.                             <p class="mb-0">ТЕПЕРЬ МОЖНО</p>
  211.                             <p class="mb-0 color-violet">ОПЛАТИТЬ SLIVKI.PAY + 5%</p>
  212.                         </div>
  213.                         <div class="button-gift-item-button">
  214.                             <div class="new">NEW</div>
  215.                         </div>
  216.                     </a>
  217.                 {% else %}
  218.                     <a class="button-gift"  data-toggle="modal" data-target=".modal-auth">
  219.                         <div class="button-gift-text">
  220.                             <p class="mb-0">ТЕПЕРЬ МОЖНО</p>
  221.                             <p class="mb-0 color-violet">ОПЛАТИТЬ SLIVKI.PAY + 5%</p>
  222.                         </div>
  223.                         <div class="button-gift-item-button">
  224.                             <div class="new">NEW</div>
  225.                         </div>
  226.                     </a>
  227.                 {% endif %}
  228.             </div>
  229.         {% endif %}
  230.         {% if offer.isFoodOnlineOrderAllowedOnSite() and  offer.getOnlineOrderSettings() is not null and offer.getOnlineOrderSettings().allowedPaymentMethods['delivery'][4] == 1 and isServerFeatureEnabled(constant('Slivki\\Enum\\SwitcherFeatures::SLIVKI_PAY')) and not pastOffer or
  231.             offer.isFoodOnlineOrderAllowedOnSite() and offer.getOnlineOrderSettings() is not null and offer.getOnlineOrderSettings().allowedPaymentMethods['pickup'][4] == 1 and isServerFeatureEnabled(constant('Slivki\\Enum\\SwitcherFeatures::SLIVKI_PAY')) and not pastOffer or
  232.             offer.getAllowedPaymentMethodsForCertificate() is defined and offer.getAllowedPaymentMethodsForCertificate() is not null and offer.getAllowedPaymentMethodsForCertificate()[4] == 1 and isServerFeatureEnabled(constant('Slivki\\Enum\\SwitcherFeatures::SLIVKI_PAY'))            %}
  233.             <div class="col my-2">
  234.                 {% if app.user %}
  235.                     <a class="button-gift" href="/virtual-wallet-pay">
  236.                         <div class="button-gift-text">
  237.                             <p class="mb-0">ТЕПЕРЬ МОЖНО</p>
  238.                             <p class="mb-0 color-violet">ОПЛАТИТЬ SLIVKI.PAY + 5%</p>
  239.                         </div>
  240.                         <div class="button-gift-item-button">
  241.                             <div class="new">NEW</div>
  242.                         </div>
  243.                     </a>
  244.                 {% else %}
  245.                     <a class="button-gift"  data-toggle="modal" data-target=".modal-auth">
  246.                         <div class="button-gift-text">
  247.                             <p class="mb-0">ТЕПЕРЬ МОЖНО</p>
  248.                             <p class="mb-0 color-violet">ОПЛАТИТЬ SLIVKI.PAY + 5%</p>
  249.                         </div>
  250.                         <div class="button-gift-item-button">
  251.                             <div class="new">NEW</div>
  252.                         </div>
  253.                     </a>
  254.                 {% endif %}
  255.             </div>
  256.         {% endif %}
  257.         <div class="sticky-element">
  258.             <div class="sticky-anchor"></div>
  259.             <div id="offerNavigation">
  260.                 <ul class="nav-list">
  261.                     <li class="nav-item"><a href="#offerDescriptionTab" class="nav-links active">
  262.                             Условия
  263.                         </a>
  264.                     </li>
  265.                     <li class="nav-item"><a href="#offerAddressTab" class="nav-links ">
  266.                             Контакты
  267.                         </a>
  268.                     </li>
  269.                     <li class="nav-item"><a href="#offerCommentTab" class="nav-links"><span></span>
  270.                             Отзывы
  271.                         </a>
  272.                     </li>
  273.                 </ul>
  274.             </div>
  275.         </div>
  276.         <div id="offerAccordion" class="accordion mt-2 px-2">
  277.             {% if offer.isWithoutCodes() and offer.isTireOnlineOrderAllowedOnSite() %}
  278.             {% if not app.user %}
  279.                 <div id="fixedButtonsBottom" class="accordion fixed py-3">
  280.                     <div id="buyButtonCard" class="card">
  281.                         <div class="card-header">
  282.                             <a id="deliveryBtn" href="#" onclick="$('.modal-auth').modal()"
  283.                                class="online-zapis js-buy-online card-link py-3 bg-violet text-white rounded-14 mx-0 text-uppercase{{ not offer.hasFreeCodes() ? ' opacity-05' }}">
  284.                                 Онлайн-запись
  285.                             </a>
  286.                         </div>
  287.                     </div>
  288.                 </div>
  289.             {% else %}
  290.                 <div id="fixedButtonsBottom" class="accordion fixed py-3">
  291.                     <div id="buyButtonCard" class="card">
  292.                         <div class="card-header">
  293.                             <a id="deliveryBtn" href="{{ offer.getOnlineRegistrationLink() }}"
  294.                                class="online-zapis js-buy-online card-link py-3 bg-violet text-white rounded-14 mx-0 text-uppercase{{ not offer.hasFreeCodes() ? ' opacity-05' }}">
  295.                                 Онлайн-запись
  296.                             </a>
  297.                         </div>
  298.                     </div>
  299.                 </div>
  300.             {% endif %}
  301.             {% endif %}
  302.             {% if not offer.isWithoutCodes() %}
  303.                 <div id="fixedButtonsBottom" class="accordion fixed py-3">
  304.                     {% if not offer.isBuyCodeDisable() %}
  305.                         <div id="buyButtonCard" class="card">
  306.                             <div class="card-header">
  307.                                 {% if offer.getID() == constant('Slivki\\Entity\\Offer::BOOKING_OFFER_ID') %}
  308.                                     <a href="#" class="m-0 card-link bg-slivki" data-toggle="modal"
  309.                                        data-target="#bookingItemPopup">
  310.                                         {{ offer.getBuyCodeButtonText() and offer.getBuyCodeButtonText() != '' ? offer.getBuyCodeButtonText() : 'Забронировать номер' }}
  311.                                     </a>
  312.                                 {% else %}
  313.                                     {% if not pastOffer and freeCodesCount > 0 %}
  314.                                         {% if not app.user %}
  315.                                             <a href="#" class="m-0 card-link bg-slivki by-code-button text-uppercase"
  316.                                                onclick="$('.modal-auth').modal()">
  317.                                                 {% if offerIsFreeForUser %}
  318.                                                     БЕСПЛАТНЫЙ ПРОМОКОД
  319.                                                 {% else %}
  320.                                                     {{ buyButtonLabel }}
  321.                                                 {% endif %}
  322.                                             </a>
  323.                                         {% else %}
  324.                                             <a href="javascript:void(0)" id="buyCodeButtonFake"
  325.                                                class="m-0 d-none card-link bg-slivki by-code-button">
  326.                                                 <img class="fixed-size" width="14" src="/images/loading-animation.gif"
  327.                                                      alt=""/>
  328.                                             </a>
  329.                                             {% if (offer.getID() == constant('Slivki\\Entity\\Offer::PETROL_OFFER_ID')) %}
  330.                                                 <a href="#"
  331.                                                    onclick="showFakeButton(); if (window.google_tag_manager) {ga('send', 'event', 'Buy code', 'Click', '{{ getURL("Slivki:Default:details", offer.getID()) }}');} document.location='/oplata-promokoda-azs'"
  332.                                                    class="m-0 card-link bg-slivki by-code-button" id="buyCodeButton">
  333.                                                     {% if offerIsFreeForUser %}
  334.                                                         БЕСПЛАТНЫЙ ПРОМОКОД
  335.                                                     {% else %}
  336.                                                         {{ buyButtonLabel }}
  337.                                                     {% endif %}
  338.                                                 </a>
  339.                                             {% else %}
  340.                                                 {% if isAllowedByOnlyCode %}
  341.                                                     {% if app.user and (isSubscriber(app.user) or isBatchCodesAllowed) and not offerIsFreeForUser and not offer.isBuyCodeInAppOnly() %}
  342.                                                         <a href="#" onclick="$('#buyPromoPopup').modal()"
  343.                                                            class="m-0 card-link bg-slivki by-code-button text-uppercase my-1"
  344.                                                            id="buyCodeButton">
  345.                                                             {{ buyButtonLabel }}
  346.                                                         </a>
  347.                                                     {% else %}
  348.                                                         {% if not app.user %}
  349.                                                             <a href="#" onclick="$('.modal-auth').modal()"
  350.                                                                class="m-0 card-link bg-slivki by-code-button text-uppercase my-1"
  351.                                                                id="buyCodeButton">
  352.                                                                 {{ buyButtonLabel }}
  353.                                                             </a>
  354.                                                         {% endif %}
  355.                                                         {% if offer.isBuyCodeInAppOnly() %}
  356.                                                             <a class="m-0 card-link bg-slivki by-code-button text-uppercase my-1"
  357.                                                                id="buyCodeButton"
  358.                                                                onclick="$('#byCodesAlwaysApp').modal()">
  359.                                                                 {{ buyButtonLabel }}
  360.                                                             </a>
  361.                                                         {% elseif not offer.isBuyCodeInAppOnly() %}
  362.                                                             {% if isServerFeatureEnabled(constant('Slivki\\Enum\\SwitcherFeatures::PAYMENT_PAYME')) or isServerFeatureEnabled(constant('Slivki\\Enum\\SwitcherFeatures::PAYMENT_CLICK')) %}
  363.                                                                 <a href="#"
  364.                                                                    class="m-0 card-link bg-slivki by-code-button text-uppercase my-1"
  365.                                                                    id="buyCodeButtonPayMeMobile"
  366.                                                                    data-target="#buyPromoPopupPayMe"
  367.                                                                    data-toggle="modal">
  368.                                                                     {{ buyButtonLabel }}
  369.                                                                 </a>
  370.                                                             {% else %}
  371.                                                                 <a href="#"
  372.                                                                    onclick="if (window.google_tag_manager) {ga('send', 'event', 'Buy code', 'Click', '{{ getURL("Slivki:Default:details", offer.getID()) }}');} showFakeButton();ym(20933521,'reachGoal','getcode-click'); document.location='{{ buyCodePopup == '#confirmBox' and canBuyFromBalance ? '/oplata-balance/' : '/oplata/' }}{{ offer.getID() }}'"
  373.                                                                    class="m-0 card-link bg-slivki by-code-button text-uppercase my-1"
  374.                                                                    id="buyCodeButton">
  375.                                                                     {{ buyButtonLabel }}
  376.                                                                 </a>
  377.                                                             {% endif %}
  378.                                                         {% endif %}
  379.                                                     {% endif %}
  380.                                                 {% endif %}
  381.                                             {% endif %}
  382.                                         {% endif %}
  383.                                     {% else %}
  384.                                         <a href="{{ categoryURL }}" class="m-0 card-link bg-slivki color-white">Посмотреть
  385.                                             похожие предложения</a>
  386.                                     {% endif %}
  387.                                 {% endif %}
  388.                             </div>
  389.                         </div>
  390.                     {% endif %}
  391.                     {% if items|length > 0 %}
  392.                         <div id="buyItemsButtonCard" class="card">
  393.                             <div class="card-header">
  394.                                 <a href="#" id="buyItemsButton" class="m-0 card-link bg-slivki" data-toggle="modal"
  395.                                    data-target="#offerItemsPopup">
  396.                                     {{ offer.getBuyItemsButtonText() and offer.getBuyItemsButtonText() != '' ? offer.getBuyItemsButtonText() : 'Оплатить сейчас по карте' }}
  397.                                 </a>
  398.                             </div>
  399.                         </div>
  400.                     {% endif %}
  401.                     {% if hasDelivery is defined and offer.getFreeCodesCount() > 0 %}
  402.                         <div id="deliveryButtonCard" class="card">
  403.                             <div class="card-header bg-transparent">
  404.                                 {% if not app.user %}
  405.                                     {% if offer.isTireOnlineOrderAllowedOnSite() %}
  406.                                         <a id="deliveryBtn" href="#" onclick="$('.modal-auth').modal()"
  407.                                            class="online-zapis js-buy-online card-link py-3 bg-violet text-white rounded-14 mx-0 text-uppercase{{ not offer.hasFreeCodes() ? ' opacity-05' }}">
  408.                                             Онлайн-запись
  409.                                         </a>
  410.                                     {% endif %}
  411.                                     {% if constant('Slivki\\Entity\\Offer::FREESTYLE_CERTIFICATE_OFFER_ID') == offer.getID() %}
  412.                                         <a href="#" onclick="$('.modal-auth').modal()"
  413.                                            class="card-link ml-0 py-3 bg-violet text-white rounded-14 text-uppercase{{ not offer.hasFreeCodes() ? ' opacity-05' }}">
  414.                                             ПОЛУЧИТЬ СКИДКУ {{ offer.getDiscount() }}
  415.                                         </a>
  416.                                     {% else %}
  417.                                         {% if offer.isGiftCertificateOnlineOrderAllowedOnSite() and not offer.isFoodOnlineOrderAllowedOnSite() and offer.getID() != 283213 and offer.getID() != 288763 and offer.getID() != 288779 and offer.getID() != 288772 %}
  418.                                             <a id="deliveryBtn" href="{{ deliveryLink }}"
  419.                                                class="js-buy-online card-link py-3 bg-violet text-white rounded-14 mx-0 text-uppercase{{ not offer.hasFreeCodes() ? ' opacity-05' }}">
  420.                                                 Оплатить онлайн {{ offer.getDiscount() }}
  421.                                             </a>
  422.                                         {% elseif offer.isGiftCertificateOffer() and offer.getID() == 288763 or offer.isGiftCertificateOffer() and offer.getID() == 288779 or offer.isGiftCertificateOffer() and offer.getID() == 288772 %}
  423.                                             <a id="deliveryBtn" href="{{ deliveryLink }}"
  424.                                                class="js-buy-online card-link py-3 bg-violet text-white rounded-14 mx-0 text-uppercase{{ not offer.hasFreeCodes() ? ' opacity-05' }}">
  425.                                                 Получить скидку {{ offer.getDiscount() }}
  426.                                             </a>
  427.                                         {% elseif not offer.isGiftCertificateOffer() and not offer.isTireOnlineOrderAllowedOnSite() %}
  428.                                             <a id="deliveryBtn" href="{{ deliveryLink }}"
  429.                                                class="js-buy-online card-link py-3 bg-violet text-white rounded-14 mx-0 text-uppercase{{ not offer.hasFreeCodes() ? ' opacity-05' }}">
  430.                                                 Заказать онлайн {{ offer.getDiscount() }}
  431.                                             </a>
  432.                                         {% endif %}
  433.                                     {% endif %}
  434.                                 {% else %}
  435.                                     {% if offer.isTireOnlineOrderAllowedOnSite() %}
  436.                                         <a id="deliveryBtn" href="{{ offer.getOnlineRegistrationLink() }}"
  437.                                            class="online-zapis js-buy-online card-link py-3 bg-violet text-white rounded-14 mx-0 text-uppercase{{ not offer.hasFreeCodes() ? ' opacity-05' }}">
  438.                                             Онлайн-запись
  439.                                         </a>
  440.                                     {% endif %}
  441.                                     {% if offer.getID() in constant('Slivki\\Entity\\Offer::FREESTYLE_OFFER_IDS') %}
  442.                                         {% set deliveryBuyOnlyCodeLink = getLinkGiftCertificateOnlineOrderByOnlyCode(offer) %}
  443.                                         <a href="{{ deliveryBuyOnlyCodeLink }}"
  444.                                            onclick="document.location = `{{ deliveryBuyOnlyCodeLink }}`"
  445.                                            class="card-link ml-0 py-3 bg-violet text-white rounded-14 text-uppercase{{ not offer.hasFreeCodes() ? ' opacity-05' }}">
  446.                                             ПОЛУЧИТЬ СКИДКУ {{ offer.getDiscount() }}
  447.                                         </a>
  448.                                     {% else %}
  449.                                         {% if offer.isGiftCertificateOnlineOrderAllowedOnSite() and not offer.isFoodOnlineOrderAllowedOnSite() %}
  450.                                             {% if offer.isGiftCertificateOnlineOrderAllowedOnSite() and offer.getID() != 283213 and offer.getID() != 288763 and offer.getID() != 288779 and offer.getID() != 288772 or offer.isGiftCertificateOffer() and not offer.isFoodOnlineOrderAllowedOnSite() %}
  451.                                                 <a href="{{ getLinkGiftCertificateOnlineOrder(offer) }}"
  452.                                                    onclick="document.location = `{{ getLinkGiftCertificateOnlineOrder(offer) }}`"
  453.                                                    class="js-buy-online card-link py-3 bg-violet text-white rounded-14 mx-0 text-uppercase{{ not offer.hasFreeCodes() ? ' opacity-05' }}">
  454.                                                     Оплатить онлайн {{ offer.getDiscount() }}
  455.                                                 </a>
  456.                                             {% elseif offer.isGiftCertificateOffer() and offer.getID() == 288763 or offer.isGiftCertificateOffer() and offer.getID() == 288779 or offer.isGiftCertificateOffer() and offer.getID() == 288772 %}
  457.                                                 <a href="{{ getLinkGiftCertificateOnlineOrder(offer) }}"
  458.                                                    onclick="document.location = `{{ getLinkGiftCertificateOnlineOrder(offer) }}`"
  459.                                                    class="js-buy-online card-link py-3 bg-violet text-white rounded-14 mx-0 text-uppercase{{ not offer.hasFreeCodes() ? ' opacity-05' }}">
  460.                                                     Получить скидку {{ offer.getDiscount() }}
  461.                                                 </a>
  462.                                             {% endif %}
  463.                                         {% else %}
  464.                                             {% if not offer.isTireOnlineOrderAllowedOnSite() %}
  465.                                                 <a href="{{ deliveryLink }}"
  466.                                                    onclick="document.location = `{{ deliveryLink }}`"
  467.                                                    class="js-buy-online card-link py-3 bg-violet text-white rounded-14 mx-0 text-uppercase{{ not offer.hasFreeCodes() ? ' opacity-05' }}">
  468.                                                     Заказать онлайн {{ offer.getDiscount() }}
  469.                                                 </a>
  470.                                             {% endif %}
  471.                                         {% endif %}
  472.                                     {% endif %}
  473.                                 {% endif %}
  474.                             </div>
  475.                         </div>
  476.                     {% endif %}
  477.                 </div>
  478.             {% endif %}
  479.             <div class="container-offers my-0 mx-0">
  480.                 <div id="offerDescriptionTab" class="mx-2 active" style="max-height: fit-content;">
  481.                     <div class="offer-titles mt-2"><h5>Условия</h5></div>
  482.                     {% if not offer.isWithoutCodes() and offer.getID() != 140553 %}
  483.                         {% set codeTill = offer.getCodeActiveTill() %}
  484.                         {% set codeFrom = offer.getActiveTill()|date_modify('-1 day') %}
  485.                         {% set codeFrom = codeFrom > codeTill ? codeTill : codeFrom %}
  486.                         {% if not offer.isHideFeatures() %}
  487.                             <p>- Получить промокод можно до {{ codeFrom|date('d.m') }}, воспользоваться {{ offer.getID() != 134390 ? 'до' }} {{ codeTill|date('d.m.y') }}.
  488.                             <br/>
  489.                         {% endif %}
  490.                         {% if offer.isShowPriceInConditions() and not offerIsFreeForUser %}
  491.                             - Стоимость промокода: {{ codeCost }} руб.
  492.                         {% endif %}</p>
  493.                     {% endif %}
  494.                     {{ offer.getConditions()|raw }}
  495.                     {# Таблица с прейскурантом для акции с квестами "Ящик Пандоры" #}
  496.                     {% if offer.getID() == 143528 %}
  497.                         <br>
  498.                         {% include 'Slivki/offers/table_for_pandorra_box_offer2.html.twig' %}
  499.                         <br>
  500.                     {% elseif offer.getID() == 282234 %}
  501.                         {% include 'Slivki/offers/table_for_pandorra_box_offer4.html.twig' %}
  502.                     {% endif %}
  503.                     {% if not offer.isHideFeatures() %}
  504.                         {% if not offer.isWithoutCodes() %}
  505.                             {% include "Slivki#{regional_template_path}/phrase_subscription_in_offer_page.html.twig" %}
  506.                         {% endif %}
  507.                         <br>
  508.                         <div class="offer-titles"><h5>Особенности</h5></div>
  509.                         <div class="offer-details-conditions">
  510.                             {% if not offer.isWithoutCodes() %}
  511.                                 - Скидка предоставляется только при наличии промокода.
  512.                             {% endif %}
  513.                             {{ offer.getFeatures()|raw }}
  514.                         </div>
  515.                         - Поставщик несет полную ответственность перед потребителем за достоверность информации.
  516.                     {% endif %}
  517.                     <div id="endOfOfferCondition"></div>
  518.                 </div>
  519.             </div>
  520.             {% if offer.getShopMedias()|length > 0 %}
  521.                 <div class="gallery-title offer-titles"><h5>Галерея</h5></div>
  522.             {% endif %}
  523.             <div class="my-4 screenshots {{ offer.getShopMedias()|length == 0 or freeCodesCount == 0 ? 'empty' }}">
  524.                 {% if offer.getShopMedias()|length > 0 %}
  525.                     <div class="screenshot-container">
  526.                         {% if  galleryVideos.getVideos() is defined and galleryVideos.getVideos()|length > 0 %}
  527.                             <div class="screenshot screenshot-story" data-toggle="modal"
  528.                                  data-target="#detailsStoryPopup">
  529.                                 <img src="{{ galleryVideos.getImageUrl() }}" width="158"
  530.                                      alt="Видео" border="0"/>
  531.                                 <div class="screenshot-story-btn"></div>
  532.                                 <div class="screenshot-story-tittle">{{ galleryVideos.getTitle() }}</div>
  533.                             </div>
  534.                         {% endif %}
  535.                         {% for media in offer.getShopMedias() %}
  536.                             <div class="screenshot">
  537.                                 <a data-fancybox="gallery1" href="{{ getImageURL(media, 0, 0) }}"
  538.                                    title="{{ media.getDescription() }}">
  539.                                     <img src="{{ getImageURL(media, 300, 0) }}" width="158"
  540.                                          alt="{{ media.getDescription() }}" border="0"/>
  541.                                 </a>
  542.                             </div>
  543.                         {% endfor %}
  544.                     </div>
  545.                 {% endif %}
  546.             </div>
  547.             <div id="examplesOfWorksBlock" class="examples-block-mobile">
  548.                 <div class="headerBlockCategory examples d-none bg-white px-0 pb-0 examples-block-mobile-header">
  549.                     <div class="offer-titles m-0"><h5>Фото
  550.                             работ{# <div class="example-of-works-count-container"><span>1234</span></div> #}</h5></div>
  551.                     <div class="examples-works-tooltip-filter">
  552.                         <div class="tooltip-content">
  553.                             <div class="tooltip-title border-bottom-f d-flex">Показать сначала:</div>
  554.                             {% for key,sortItem in constant('Slivki\\Paginator\\WorkExample\\WorkExamplePaginatorInterface::SORT') %}
  555.                                 <div class="radio">
  556.                                     <input id="filter{{ key }}" type="radio" name="filter"
  557.                                            data-direction="{{ sortItem.direction }}"
  558.                                            value="{{ sortItem.field }}" {{ loop.first ? 'checked' }}>
  559.                                     <label for="filter{{ key }}" class="cursor-pointer">{{ sortItem.name }}</label>
  560.                                 </div>
  561.                             {% endfor %}
  562.                             <div class="tooltip-title border-top-f d-flex">Диапазон цены:</div>
  563.                             <div id="workExamplePriceRangeInputs" class="price-range-inputs d-flex">
  564.                                 <div class="price-range-input"><input type="number" placeholder="Цена от" id="priceFrom"
  565.                                                                       name="priceFrom" min="0" max="199" step="1"></div>
  566.                                 <div class="price-range-input"><input type="number" placeholder="Цена до" id="priceTo"
  567.                                                                       name="priceTo" min="0" max="200" step="1"></div>
  568.                             </div>
  569.                             <div id="workExampleRangeSlider" class="range-slider">
  570.                                 <div class="range-labels">
  571.                                     <span id="workSimplesRangeLableStart" class="range-label range-label-start"></span>
  572.                                     <span>-</span>
  573.                                     <span id="workSimplesRangeLableEnd" class="range-label range-label-end"></span>
  574.                                 </div>
  575.                                 <input class="work-simples-input" type="range" min="" value="0" max="" name=""
  576.                                        id="startRange">
  577.                                 <input class="work-simples-input" type="range" min="" value="" max="" name=""
  578.                                        id="finishRange">
  579.                                 <div class="track-wrapper">
  580.                                     <div class="track"></div>
  581.                                     <div id="workSimplesSliderBetween" class="range-between"></div>
  582.                                     <div id="workSimplesTumbLeft" class="thumb left"></div>
  583.                                     <div id="workSimplesTumbRight" class="thumb right"></div>
  584.                                 </div>
  585.                             </div>
  586.                             <div id="buttonFilterBoxExamplesWork" class="buttonFilterBox">Показать</div>
  587.                         </div>
  588.                         <div id="buttonFilterBoxExamplesWork" class="d-flex cursor-pointer">Сортировка<img width="25" class="pl-2" src="/images/sort_image.svg"/></div>
  589.                     </div>
  590.                 </div>
  591.                 {% include 'Slivki/works-examples/examples_of_works_gallery.html.twig' %}
  592.             </div>
  593.             <div id="beautyMastersBlock" class="beauty-masters-container beauty-masters-offer mob">
  594.                 <div id="beautyMastersHeader"
  595.                      class="tittleBlockCategory position-relative offer-titles mb-2 mt-0 d-none">
  596.                     <h5> {{ parentCategoryList and parentCategoryList[0].getID() == constant('Slivki\\Entity\\Category::MEDICAL_CENTER_CATEGORY_ID') ? 'Врачи' : 'Найти своего мастера' }}</h5>
  597.                 </div>
  598.                 {% include 'Slivki/beauty/beauty_masters.html.twig' %}
  599.             </div>
  600.             <div id="offersDescription" class="offers-conditions mt-2 js-parallax-banner-after"
  601.                  style="padding-bottom: 22px;">
  602.                 {% if offer.isShowProductsInOfferDescription() %}
  603.                     <div id="foodItemsBlock" class="my-3">
  604.                         <div class="offer-titles mt-2"><h5>Описание</h5></div>
  605.                         {% if isPickupEnabled and isDeliveryEnabled %}
  606.                             <div id="fixedFiltersOffer" class="w-auto px-2 d-flex"
  607.                                  style="position: relative;background: linear-gradient(180deg, #A839FF 0%, #6747e5 100%), #6747E5;border-radius: 8px;padding: 10px 0;">
  608.                                 <div class="w-100 switch-delivery-pickup-block px-0 ">
  609.                                     <a data-type-delivery="1"
  610.                                        class="switch-delivery-pickup-item button-tab-delivery delivery-type active">
  611.                                         <p class="m-0">Доставка</p>
  612.                                         <small>удобно👌</small>
  613.                                     </a>
  614.                                     <a data-type-delivery="2"
  615.                                        class="switch-delivery-pickup-item pickup-type button-tab-pickup">
  616.                                         <p class="m-0"> Самовывоз</p>
  617.                                         <small>еще дешевле🔥</small>
  618.                                     </a>
  619.                                 </div>
  620.                             </div>
  621.                         {% endif %}
  622.                         <div id="foodBlock"></div>
  623.                         <div id="foodOptionsBlock"></div>
  624.                     </div>
  625.                 {% endif %}
  626.                 <div class="description" id="descriptionText">
  627.                     {% for offerDescription in offer.getDescriptionList() %}
  628.                         {% set offerDescriptionSliderImages = offerDescription.getEntityDescriptionSliderImages() %}
  629.                         {% if offerDescriptionSliderImages|length > 0 %}
  630.                             <div class="sale-description-carousel">
  631.                                 <div id="saleDescriptionSliderFor{{ offerDescription.getID() }}"
  632.                                      class="sale-description-slider-for">
  633.                                     {% for offerDescriptionSliderImage in offerDescriptionSliderImages %}
  634.                                         <div><img data-lazy="{{ offerDescriptionSliderImage.getImageUrl() }}"/>
  635.                                         </div>
  636.                                     {% endfor %}
  637.                                 </div>
  638.                             </div>
  639.                         {% endif %}
  640.                         {{ addLazyAndLightboxImagesInDescription(offerDescription.getDescription())|raw }}
  641.                     {% endfor %}
  642.                 </div>
  643.             </div>
  644.             <div id="offerAddressTab" class="mx-1 mt-5">
  645.                 <div class="offer-titles"><h5 class="mb-2">Контакты</h5></div>
  646.                 <div class="mb-4 logo-title">
  647.                     {{ offer.getLogo()|raw }}
  648.                 </div>
  649.                 <div class="p-m-0">
  650.                     {% if geoLocations.count() > 0 %}
  651.                         {% if geoLocations|length > 0 %}
  652.                             <div class="geo-location-block">
  653.                                 {% include 'Slivki/offers/geo_location_data.html.twig' with {'offer': offer} only %}
  654.                                 <div class="distance d-none" style="display: block">
  655.                                     <i class="slivki-icon slivki-icon-direction"></i> <img class='ajaxLoader'
  656.                                                                                            src='/images/ajax-loader-16x16.gif'
  657.                                                                                            alt='Загрузка...'/><span></span>
  658.                                 </div>
  659.                                 <div id="offerGeoLocationData" data-json="{{ offerGeoLocationData }}"></div>
  660.                                 <div id="offerMapWrapper" class="category-map-wrapper my-3">
  661.                                     <div id="offerMap" class="category-map"></div>
  662.                                     <a id="setUserLocationBtn" href="#">Указать местоположение</a>
  663.                                     <div id="zoomIn"></div>
  664.                                     <div id="zoomOut"></div>
  665.                                     <a id="mapEnterFullscreen" href="#" class="fullscreen-map-button">Развернуть</a>
  666.                                     <a id="mapExitFullscreen" href="#" class="fullscreen-map-button">Свернуть</a>
  667.                                 </div>
  668.                             </div>
  669.                         {% endif %}
  670.                     {% endif %}
  671.                     {% for geoLocation in geoLocations %}
  672.                         <div class="mb-3 my-3">
  673.                             <div class="sf-bold-font">{{ geoLocation.getCity() }}, {{ geoLocation.getStreet() }}
  674.                                 , {{ geoLocation.getHouse() }} {{ geoLocation.getLabel() }}</div>
  675.                             {% set phoneNumbers = geoLocation.getPhoneNumbers() %}
  676.                             {% if phoneNumbers|length > 0 %}
  677.                             {% endif %}
  678.                             {% for phoneNumber in phoneNumbers %}
  679.                                 {% include 'Slivki/mobile/offer/phone_number_btn.html.twig' with {'phoneNumber': phoneNumber, 'geoLocation': geoLocation} only %}
  680.                             {% endfor %}
  681.                             {% if geoLocation is defined and geoLocation.getCallbackChatId() and geoLocation.getCallbackChatId() != '' %}
  682.                                 <div class="callback-button" data-id="{{ geoLocation.getId() }}">Обратный звонок</div>
  683.                             {% endif %}
  684.                             {% if geoLocation.getWorkingHours()|trim != '' %}
  685.                                 <div>Время работы:</div> {{ geoLocation.getWorkingHours()|raw }}
  686.                             {% endif %}
  687.                         </div>
  688.                     {% endfor %}
  689.                     {% if phoneNumbersWithoutGeoLocations|length > 0 %}
  690.                     {% if geoLocations|length > 0 %}
  691.                         <br>
  692.                     {% endif %}
  693.                     <div id="phoneOffers" class="mb-2">
  694.                         <div class="mb-2">
  695.                             <strong>Телефон{{ phoneNumbersWithoutGeoLocations|length > 1 ? 'ы' }}:</strong>
  696.                         </div>
  697.                         {% for phoneNumber in phoneNumbersWithoutGeoLocations %}
  698.                             {% include 'Slivki/mobile/offer/phone_number_btn.html.twig' with {'phoneNumber': phoneNumber} only %}
  699.                         {% endfor %}
  700.                     </div>
  701.                 </div>
  702.                 {% endif %}
  703.                 {% set commonWoringHours = offer.getCommonWorkingHours() %}
  704.                 {% if commonWoringHours != '' %}
  705.                     <br>
  706.                     <div><strong>Время работы:</strong></div>
  707.                     {{ commonWoringHours|raw }}
  708.                     <br><br>
  709.                 {% endif %}
  710.                 {{ offer.getLegal()|raw }}
  711.                 <div class="offer-titles offer-titles-mobile mt-0 mb-0"><h5 class="mt-0 mb-0">Написать</h5></div>
  712.                 <div class="col px-0">
  713.                     <a class="tg-button offer-phone-mob btn btn-block bg-slivki text-white py-1 no-decoration my-2 d-flex justify-content-center align-items-center"
  714.                        href="https://t.me/{{ offer.getTelegram() != null ? offer.getTelegram() : 'slivkislivkiby' }}"
  715.                        style="width: 200px">
  716.                         <img class="mr-2" src="/images/tg.svg" width="20" height="18">
  717.                         <span class="float-right">Telegram</span>
  718.                     </a>
  719.                     {% set viberNumber = offer.getViber() != null ? offer.getViber() : '+375295084444' %}
  720.                     <a class="vb-button offer-phone-mob btn btn-block bg-slivki text-white py-1 no-decoration my-2 d-flex justify-content-center align-items-center"
  721.                        href='viber://chat?number="  {{ viberNumber }} "'
  722.                        style="width: 200px">
  723.                         <img class="mr-2" src="/images/vb.svg" width="20" height="18">
  724.                         <span class="float-right">Viber</span>
  725.                     </a>
  726.                 </div>
  727.             </div>
  728.             {% include 'Slivki/offers/share.html.twig' %}
  729.         </div>
  730.         <div id="offerCommentTab" class="pt-2 px-0">
  731.             <div>
  732.                 {{ comments|raw }}
  733.             </div>
  734.         </div>
  735.     </div>
  736.     </div>
  737.     {% if preview %}
  738.         <input type="hidden" id="offerPreview" value="1">
  739.     {% else %}
  740.         <input type="hidden" id="offerPreview" value="0">
  741.     {% endif %}
  742.     </div>
  743.     {% if showGlobalcard %}
  744.         {% include 'Slivki/mobile/offer/globalcard.html.twig' %}
  745.     {% elseif showGlobalcardFitness %}
  746.         {% include 'Slivki/mobile/offer/globalcard_fitness.html.twig' %}
  747.     {% endif %}
  748. {% endblock %}
  749. {% block popup %}
  750.     {% include 'Slivki/popups/header_offers.html.twig' %}
  751.     {% include 'Slivki/popups/mail_offers.html.twig' %}
  752.     {% include 'Slivki/popups/callback.html.twig' %}
  753.     {% include "Slivki#{regional_template_path}/jivosite/modal_mobile.html.twig" %}
  754.     {% if  galleryVideos.getVideos() is defined and galleryVideos.getVideos()|length > 0 %}
  755.         {% include 'Slivki/popups/details-story-popup.html.twig' %}
  756.     {% endif %}
  757.     {% include 'Slivki/orderAsGift/foodForGift.html.twig' with {'deliveryLink': deliveryLink} %}
  758.     {% if isServerFeatureEnabled(constant('Slivki\\Enum\\SwitcherFeatures::PAYMENT_PAYME')) %}
  759.         {% include 'Slivki/uz/mobile/buy_promo.twig' %}
  760.     {% endif %}
  761.     {% if app.user %}
  762.         {% include 'Slivki/popups/rating_edit_popup.html.twig' %}
  763.         {% include 'Slivki/mobile/popup/popup_subscription_limited.html.twig' %}
  764.         {% include 'Slivki/mobile/subscription/buy_promo_popup.html.twig' %}
  765.         {% include 'Slivki/mobile/popup/confirm_subscription_card_popup.html.twig' with {'creditCards': app.user.getActiveCreditCards()} %}
  766.         {% include 'Slivki/mobile/popup/buy_codes_avways_app.html.twig' %}
  767.         {% include 'Slivki/popups/add_favourite_popup.html.twig' %}
  768.         {% include 'Slivki/popups/delete_favourite_popup.html.twig' %}
  769.         {% include 'Slivki/popups/delete_comment_popup.html.twig' with {id: 'deleteCommentConfirmPopup'} %}
  770.     {% else %}
  771.         {% include 'Slivki/popups/comment_only_registered_popup.html.twig' with {'id': 'onlyRegistered'} %}
  772.     {% endif %}
  773.     {% include 'Slivki/popups/comment_media_block_popup.html.twig' %}
  774.     {% include 'Slivki/mobile/popup/add_comment_popup.html.twig' %}
  775.     {% include 'Slivki/popups/edit_comment_popup.html.twig' with {'id': 'editVoteBox'} %}
  776.     {% include 'Slivki/popups/comment_censor_message.html.twig' with {'id': 'commentCensorMessage'} %}
  777.     {% include 'Slivki/mobile/share_block.html.twig' %}
  778.     {% include 'Slivki/mobile/popup/statistics_popup.html.twig' %}
  779.     {% include 'Slivki/mobile/delivery/modal/details.html.twig' with {'isOfferPage': true} %}
  780.     {% if items|length > 0 %}
  781.         {% include 'Slivki/mobile/offer/extension/item/items_popup.html.twig' %}
  782.     {% endif %}
  783.     {% if offer.getID() == constant('Slivki\\Entity\\Offer::BOOKING_OFFER_ID') %}
  784.         {% include 'Slivki/mobile/offer/booking_popup.html.twig' %}
  785.     {% endif %}
  786.     {{ parent() }}
  787.     {% if offer.isGiftCertificateOffer() %}
  788.         {% include 'Slivki/popups/step_buy_certificate.twig' with {'deliveryLink': deliveryLink} %}
  789.     {% endif %}
  790.     {% include 'Slivki/mobile/popup/loading_popup.html.twig' %}
  791.     {% include 'Slivki/mobile/popup/contact_popup.html.twig' %}
  792. {% endblock %}
  793. {% block brandingBanner %}
  794.     {% if not (app.user and app.user.hasRole(constant('\\Slivki\\Entity\\UserGroup::ROLE_ADS_FREE'))) %}
  795.         {% set brandingBanner = getBrandingBanner(app.user, brandingBannerCategoryIDs is defined ? brandingBannerCategoryIDs : [], offer is defined ? offer.getID()) %}
  796.         {% if brandingBanner and brandingBanner.getMobileDivider() %}
  797.             <input type="hidden" id="brandingBannerImage" value="{{ brandingBanner.getMobileDivider() }}"
  798.                    data-oid="{{ brandingBanner.getID() }}" data-id="{{ brandingBanner.getBannerID() }}"
  799.                    data-branding="{{ brandingBanner.getBannerID() }}" data-url="{{ brandingBanner.getUrl()|trim }}"
  800.                    data-right-side-url="{{ brandingBanner.getRightSideUrl()|trim }}">
  801.         {% endif %}
  802.     {% endif %}
  803. {% endblock %}
  804. {% block javascripts %}
  805.     {{ parent() }}
  806.     <script src="/js/jquery.jcarousel.min.js?v=1"></script>
  807.     <script src="/js/story-slider/story-slider-js.js?v={{ story_slider_js_version }}"></script>
  808.     <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.lazyload/1.9.1/jquery.lazyload.min.js"
  809.             integrity="sha512-jNDtFf7qgU0eH/+Z42FG4fw3w7DM/9zbgNPe3wfJlCylVDTT3IgKW5r92Vy9IHa6U50vyMz5gRByIu4YIXFtaQ=="
  810.             crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  811.     <script type="text/javascript">
  812.         $(function () {
  813.             $('#floatingBanner').addClass('offer-details-floating-banner');
  814.         });
  815.     </script>
  816.     <!-- Moment -->
  817.     <script src="/admin/plugins/moment/moment-with-locales.js"></script>
  818.     <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.bundle.min.js"></script>
  819.     <script src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.3.5/jquery.fancybox.min.js"></script>
  820.     <script src="/js/swiper-js/swiper.min.js"></script>
  821.     <script src="/js/offer-new.js?v={{ offer_new_js_version }}"/>
  822.     <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>
  823.     <script src="https://yastatic.net/es5-shims/0.0.2/es5-shims.min.js"></script>
  824.     <script src="https://yastatic.net/share2/share.js"></script>
  825.     <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.countdown/2.2.0/jquery.countdown.js"></script>
  826.     <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.maskedinput/1.4.1/jquery.maskedinput.min.js"></script>
  827.     <script src="https://cdnjs.cloudflare.com/ajax/libs/fecha/2.3.3/fecha.min.js"></script>
  828.     <script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.js"></script>
  829.     <!-- date-time-picker -->
  830.     <script src="/admin/plugins/datetimepicker/js/bootstrap-datetimepicker.min.js"></script>
  831.     <!-- colorpicker -->
  832.     <script src="/admin/plugins/colorpicker/bootstrap-colorpicker.min.js"></script>
  833.     <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-toast-plugin/1.3.2/jquery.toast.min.js"
  834.             integrity="sha512-zlWWyZq71UMApAjih4WkaRpikgY9Bz1oXIW5G0fED4vk14JjGlQ1UmkGM392jEULP8jbNMiwLWdM8Z87Hu88Fw=="
  835.             crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  836.     <script src="/mobile/js/offer.min.js?v={{ offer_js_version }}"></script>
  837.     <script type="text/javascript" src="/js/statistics_offer/statistics_offer.js?v={{ statistics_offer_js_version }}"
  838.             charset="utf-8"></script>
  839.     <script src="https://cdnjs.cloudflare.com/ajax/libs/easy-pie-chart/2.1.6/jquery.easypiechart.min.js"
  840.             integrity="sha512-DHNepbIus9t4e6YoMBSJLwl+nnm0tIwMBonsQQ+W9NKN6gVVVbomJs9Ii3mQ+HzGZiU5FyJLdnAz9a63ZgZvTQ=="
  841.             crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  842.     <script src="https://cdnjs.cloudflare.com/ajax/libs/easy-pie-chart/2.1.6/easypiechart.min.js"
  843.             integrity="sha512-1yldf7W5suy0ko2u4OGU1qyeGrzh9+A3uyWGH4ws8MbndaWxZsgnzy6uqqBq7NUU/ImI1Js5kqDbunovCN1JqA=="
  844.             crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  845.     <script src="/js/ajaxupload.3.5.js?v=1"></script>
  846.     <script src="/js/mobile-rating.js?v=2"></script>
  847.     <script>
  848.         uploadPhoto('/comment/image_upload', '/comment/image_remove');
  849.         initImageRemove();
  850.     </script>
  851.     <script type="text/javascript">
  852.         {% if app.request.query.has('checkOrder') %}
  853.         initCheckOfferOrderStatus({{ app.request.get('checkOrder') }});
  854.         {% endif %}
  855.     </script>
  856.     <script src="/js/offer/offerDescriptionItems.js?v={{ offer_description_items_js_version }}"></script>
  857.     <script type="module" src="/js/work_examples/work_examples.js?v={{ work_examples_js_version }}"></script>
  858.     <script type="module" src="/js/beauty/masters.js?v={{ beauty_masters_js_version }}"></script>
  859. {% endblock %}
  860. {% block RTBHouse %}
  861.     <script>
  862.         try {
  863.             (function () {
  864.                 var prefix = "", hash = "TS5TS2S9bdSbgKBA4Q2H", rtbhTags = [];
  865.                 rtbhTags.push("pr_" + hash + "_offer_" + document.getElementById('offerID').value);
  866.                 rtbhTags.push("pr_" + hash + "_uid_" + document.getElementById('rtbhUID').value);
  867.                 var key = "__rtbhouse.lid", lid = window.localStorage.getItem(key);
  868.                 if (!lid) {
  869.                     lid = "";
  870.                     var pool = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  871.                     for (var i = 0; i < 20; i++) lid += pool.charAt(Math.floor(Math.random() * pool.length));
  872.                     window.localStorage.setItem(key, lid);
  873.                 }
  874.                 rtbhTags.push("pr_" + hash + "_lid_" + lid);
  875.                 var ifr = document.createElement("iframe"),
  876.                     sr = encodeURIComponent(document.referrer ? document.referrer : ""),
  877.                     su = encodeURIComponent(document.location.href ? document.location.href : ""),
  878.                     ifrSrc = "https://" + prefix + "creativecdn.com/tags?type=iframe",
  879.                     tmstmp = encodeURIComponent("" + Date.now());
  880.                 for (var i = 0; i < rtbhTags.length; i++) {
  881.                     ifrSrc += "&id=" + encodeURIComponent(rtbhTags[i]);
  882.                 }
  883.                 ifrSrc += "&su=" + su + "&sr=" + sr + "&ts=" + tmstmp;
  884.                 ifr.setAttribute("src", ifrSrc);
  885.                 ifr.setAttribute("width", "1");
  886.                 ifr.setAttribute("height", "1");
  887.                 ifr.setAttribute("scrolling", "no");
  888.                 ifr.setAttribute("frameBorder", "0");
  889.                 ifr.setAttribute("style", "display:none");
  890.                 ifr.setAttribute("referrerpolicy", "no-referrer-when-downgrade");
  891.                 if (document.body) {
  892.                     document.body.appendChild(ifr);
  893.                 } else {
  894.                     window.addEventListener('DOMContentLoaded', function () {
  895.                         document.body.appendChild(ifr);
  896.                     });
  897.                 }
  898.             })();
  899.         } catch (e) {
  900.         } </script>
  901. {% endblock %}