exception |
Twig\Error\RuntimeError {#4678
-lineno: 347
-name: "Slivki/offers/details.html.twig"
-rawMessage: "Key "4" for array with keys "1, 2, 3" does not exist."
-sourcePath: "/mnt/data/virtwww/test/templates/Slivki/offers/details.html.twig"
-sourceCode: """
{% extends 'base.html.twig' %}\n
\n
{% block title %}{{ parent() }}{{ currentPage is defined and currentPage != 1 ? ' - Страница №' ~ currentPage }}{% endblock %}\n
\n
{% block messenger %}{% endblock %}\n
\n
{% block stylesheets %}\n
<link rel="stylesheet" href="/css/statistics_modal.css?v=4"/>\n
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.css"/>\n
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.css">\n
<link rel="stylesheet" href="/admin/plugins/datetimepicker/css/bootstrap-datetimepicker.min.css">\n
<link rel="stylesheet" href="/admin/plugins/datatables/jquery.dataTables.min.css"/>\n
<link rel="stylesheet" href="/admin/plugins/colorpicker/bootstrap-colorpicker.min.css"/>\n
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.css">\n
<link rel="stylesheet" href="/css/swiper/swiper.min.css"/>\n
<link href="/css/bootstrap3.3.6.min.css" type="text/css" rel="stylesheet">\n
<link rel="stylesheet"\n
href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.37/css/bootstrap-datetimepicker-standalone.min.css"\n
integrity="sha512-L0/PNISezIYAoqFXBGP9EJ4qLH8XF356+Lo92vzloQqk7HUpZ4FN1x1dUOnsUAUjHTSxXxeaD0HXfrANhtJOEA=="\n
crossorigin="anonymous" referrerpolicy="no-referrer"/>\n
{{ parent() }}\n
<link href="/css/offers.min.css?v={{ offers_css }}" rel="stylesheet" type="text/css"/>\n
<link href="/css/foodForGift.css?v={{ food_for_gift_css }}" rel="stylesheet" type="text/css"/>\n
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css"\n
integrity="sha512-c42qTSw/wPZ3/5LBzD+Bw5f7bSF2oxou6wEb+I/lqeaKV5FDIfMvvRp772y4jcJLKuGUOpbJMdg/BTl50fJYAw=="\n
crossorigin="anonymous" referrerpolicy="no-referrer"/>\n
{% endblock %}\n
{% set isOfferFavourite = app.user ? app.user.isOfferFavourite(offer) : false %}\n
\n
{% set subscribed = app.user and isSubscriber(app.user) %}\n
{% block ogimage %}\n
{% if detailMediaList|length > 0 %}\n
<meta property="og:image"\n
content="{{ app.request.getSchemeAndHttpHost() }}{{ getImageURL(detailMediaList|first, 522, 322) }}"/>\n
<meta property="og:image:width" content="522"/>\n
<meta property="og:image:height" content="322"/>\n
{% else %}\n
{{ parent() }}\n
{% endif %}\n
{% endblock %}\n
\n
{% block header %}\n
{% embed 'header.html.twig' %}\n
{% block headerTopMenu %}\n
{{ parent() }}\n
{% endblock %}\n
{% endembed %}\n
{% endblock %}\n
\n
{% block mainColumnClass %} one-column bg-white{% endblock %}\n
{% block main_content %}\n
{% set isPickupEnabled = offer.getOnlineOrderSettings().isPickupEnabled() is defined ? offer.getOnlineOrderSettings().isPickupEnabled() %}\n
{% set isDeliveryEnabled = offer.getOnlineOrderSettings().isDeliveryEnabled() is defined ? offer.getOnlineOrderSettings().isDeliveryEnabled() %}\n
{% set ratingWithCount = getEntityRatingWithCount(constant('Slivki\\Entity\\Category::OFFER_CATEGORY_ID'), offer.getID()) %}\n
{% if isPickupEnabled or isDeliveryEnabled %}\n
<input id="deliveryMethodEnabled" type="hidden" value="{{ isDeliveryEnabled == '' ? '2' : '1' }}">\n
{% endif %}\n
<input id="offerID" type="hidden" value="{{ offer.getID() }}">\n
<input id="isMedicalCenter" type="hidden"\n
value="{{ parentCategoryList and parentCategoryList[0].getID() == constant('Slivki\\Entity\\Category::MEDICAL_CENTER_CATEGORY_ID') }}">\n
<input type="hidden" id="stock-id" value="{{ offer.getID() }}">\n
<input type="hidden" id="stock-link" value="{{ app.request.getSchemeAndHttpHost() ~ app.request.getRequestUri() }}">\n
\n
{% if subscribed %}\n
<input id="allowedCodesCountBySubscription" type="hidden" value="{{ allowedCodesCountBySubscription }}">\n
{% endif %}\n
{% if app.user %}\n
<input id="splitTotalCodesCountByUser" type="hidden" value="{{ app.user.getCodesCountByOffer(offer) }}">\n
<input type="hidden" id="customerID" value="{{ app.user.getID() }}"/>\n
{% endif %}\n
<input type="hidden" id="codeCost" value="{{ codeCost }}">\n
<input type="hidden" class="buyOrderAmount form-element" type="text"\n
value="{{ codeCost }}"/>\n
<div class="content-wrapper">\n
<div class="content-wrapper-offers" itemscope itemtype="https://schema.org/Product">\n
<div class="d-flex pb-2" style="padding: 10px 34px;">\n
<div class="col-6">\n
{% include 'Slivki/breadcrumbs.html.twig' with { 'parentCategoryList': parentCategoryList, 'supplierCategoryData': offer.getSupplierCategoryData() } only %}\n
</div>\n
<div class="col-6">\n
<p class="color-violet text-end cursor-pointer" data-toggle="modal"\n
data-target="{{ app.user ? '#complaintModal' : '.modal-auth' }}">\n
Пожаловаться на акцию</p>\n
</div>\n
</div>\n
<h3 class="offers-tittle" style="color: {{ offer.getTitleFontColor() }};">{{ offer.getTitle()|raw }}</h3>\n
<div class="content-offers-top pb-0">\n
<div class="left-top-block">\n
{% if app.user() and not pastOffer %}\n
<div class="button-add-follow fovoutite-block"\n
onclick="onFavouriteClickOffer({{ offer.getID() }}, {{ isOfferFavourite ? 'true' : 'false' }})"\n
data-html="true"\n
data-toggle="tooltip"\n
data-placement="top"\n
data-original-title="Добавить в <br> избранное"\n
>\n
<img src="{{ isOfferFavourite ? '/images/heart_active.svg' : '/images/offers/follow.svg' }}">\n
</div>\n
{% endif %}\n
<div class="content-wrapper-carousel position-relative" style="margin-bottom: 28px">\n
<div class="stock-image">\n
<div id="offerImageSlider" class="m-0 swiper-container">\n
{% if is_granted('ROLE_ADMIN') and not offer.isWithoutCodes() %}\n
<div id="statisticsButton" data-toggle="modal" data-target="#statisticOffersPopup">\n
<img width="37" height="37" src="/images/statistics.png"/>\n
</div>\n
{% endif %}\n
<div class="swiper-wrapper"\n
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%' }}>\n
{% set medias = detailMediaList %}\n
{% set mediaCount = medias|length %}\n
{% if mediaCount > 1 %}\n
{% for media in medias %}\n
<div class="swiper-slide">\n
{% if media.isYoutube() %}\n
<input class="js-src-video" type="hidden"\n
value="https://www.youtube.com/embed/{{ media.getName() }}">\n
{% else %}\n
<img class="img-fluid lazyload" alt="{{ media.getDescription() }}"\n
src="{{ getImageURL(media, 1044, 644) }}"/>\n
{% endif %}\n
</div>\n
{% endfor %}\n
{% elseif mediaCount == 1 %}\n
<div>\n
<img class="img-fluid lazyload" alt="{{ medias[0].getDescription() }}"\n
src="{{ getImageURL(medias[0], 1044, 644) }}"/>\n
</div>\n
{% endif %}\n
</div>\n
{% if mediaCount > 1 %}\n
<div class="swiper-pagination mt-2"></div>\n
<div class="swiper-button-next"></div>\n
<div class="swiper-button-prev"></div>\n
{% endif %}\n
</div>\n
</div>\n
{% if not offer.isWithoutCodes() %}\n
<div class="discount-block">\n
{{ offer.getDiscount() }}\n
</div>\n
{% endif %}\n
{% if offer.isWithoutCodes() %}\n
<div class="button-add-follow button-add-follow-teaser fovoutite-block"\n
onclick="onFavouriteClickOffer({{ offer.getID() }}, {{ isOfferFavourite ? 'true' : 'false' }})"\n
data-html="true"\n
data-toggle="tooltip"\n
data-placement="top"\n
data-original-title="Добавить в <br> избранное"\n
>\n
<img src="{{ isOfferFavourite ? '/images/heart_active.svg' : '/images/offers/follow.svg' }}">\n
</div>\n
{% endif %}\n
</div>\n
</div>\n
<div class="right-top-block">\n
<div class="offers-description">\n
{% if pastOffer or offer.getFreeCodesCount() == 0 %}\n
<div class="past-offer mt-5 pt-5">\n
<i class="slivki-icon-minus-circled"></i>\n
<p>Упс, акция завершена!</p>\n
<a href="#offersConditions" class="buttons-link-offers">\n
Условия\n
</a>\n
<a href="#conditionAddress" class="buttons-link-offers">\n
Адрес, телефоны\n
</a>\n
<a href="#offersReview" class="buttons-link-offers">\n
Отзывы\n
</a>\n
</div>\n
\n
{% else %}\n
{% if not offer.isInFreeCodesCategory() and not offer.isWithoutCodes() %}\n
<div class="d-flex statistic-block {% if is_granted('ROLE_ADMIN') %}justify-content-between{% endif %} col px-2 my-0">\n
<p class="text-dark-violet font-size-0750 text-end w-auto"\n
data-toggle="tooltip"\n
data-html="true" data-placement="top"\n
data-original-title="Кол-во продаж к кол-ву просмотров. <br> Конверсия за 30 дней">\n
Конверсия {{ getOfferConversion(offer.getID()) }}%</p>\n
</div>\n
{% endif %}\n
{% if not offer.isWithoutCodes() %}\n
<div class="d-flex offers-description--item">\n
<div class="col">\n
<p class="color-dark-gray px-0 mb-0">Взято всего:</p>\n
</div>\n
<div class="col font-bold text-end">\n
<p> {{ multiplePoolOfferUsedCodesCount is defined ? multiplePoolOfferUsedCodesCount : usedCodesCount }}\n
{{ ['промокод', 'промокода', 'промокодов']|plural(usedCodesCount) }}\n
из {{ allCodesCount }}</p>\n
</div>\n
</div>\n
<div class="d-flex px-2 my-0">\n
<div class="col">\n
<p class="color-dark-gray mb-0">Взято сутки/месяц:</p>\n
</div>\n
<div class="col font-bold text-end pl-2">\n
<p>{{ todayPurchaseCount }}\n
/{{ getOfferMonthlyPurchaseCount(offer.getID(), 30) > 0 ? getOfferMonthlyPurchaseCount(offer.getID(), 30) : 0 }} {{ ['промокод', 'промокода', 'промокодов']|plural(todayPurchaseCount) }}\n
</p>\n
</div>\n
</div>\n
{% endif %}\n
<div class="d-flex {{ offer.isWithoutCodes() ? 'pl-2' : 'offers-description--item' }}">\n
<div class="col">\n
<p class="color-dark-gray">Просмотров сутки/месяц:</p>\n
</div>\n
<div class="col font-bold text-end">\n
<p>{{ todayVisitCount }}/{{ visitCount }}</p>\n
</div>\n
</div>\n
{% if not offer.isWithoutCodes() %}\n
<div class="d-flex px-2 my-0">\n
<div class="col">\n
<p class="color-dark-gray">До завершения: </p>\n
</div>\n
<div class="col text-end">\n
{% if freeCodesCount > 0 %}\n
<input type="hidden" id="daysLeft" value="{{ daysLeft }} "/>\n
<input type="hidden" id="hoursLeft" value="{{ hoursLeft }} "/>\n
<input type="hidden" id="minutesLeft" value="{{ minutesLeft }} "/>\n
<input type="hidden" id="secondsLeft"\n
value="{{ offer.getActiveTill().diff(date()).format('%s') }}"/>\n
<span id="days">{{ daysLeft }}\n
 </span>{{ ['день', 'дня', 'дней']|plural(daysLeft) }}, \n
<span id="hours">{{ hoursLeft }} </span>час{{ ['', 'а', 'ов']|plural(hoursLeft) }} \n
{% endif %}\n
</div>\n
</div>\n
{% endif %}\n
<div class="d-flex offers-description--item js-to-review-block">\n
<div class="col">\n
<p class="color-dark-gray">Отзывы/оценка:</p>\n
</div>\n
<div class="col font-bold text-end">\n
<p>{{ commentsAmount }} /\n
<r data-html="true"\n
data-toggle="tooltip"\n
data-placement="top"\n
data-original-title="Рейтинг компании <br> за 90 дней">\n
<span class="yellow-span">★</span>{{ offer.getRating() }}</r>\n
\n
</p>\n
</div>\n
</div>\n
<div class="d-flex offer-price-block">\n
<div class="col px-2">\n
<p class="color-dark-gray">Стоимость:</p>\n
</div>\n
<div class="col text-end">\n
<span id="offerRegularPrice"\n
class="regular-price">{{ offer.getRegularPrice() }}</span>\n
<span class="discount-price"> {{ offer.getOfferPrice()|replace({'(': '<span id="details-offer-price">(', ')': ')</span>'})|raw }}</span>\n
</div>\n
</div>\n
{% if offer.isWithoutCodes() %}\n
<a href="/moya_akciya" target="_blank">\n
<img class="mt-3" src="/images/without_codes.png"/>\n
</a>\n
{% endif %}\n
{% endif %}\n
</div>\n
<div class="d-flex" style="min-height: 90px;align-items: end;">\n
{% if offer.getFreeCodesCount() > 0 and not offer.isWithoutCodes() %}\n
<div class="buttons-wrapper-offers">\n
{% if hasDelivery is defined %}\n
{% if not offer.isBuyCodeDisable() %}\n
{% include 'Slivki/offers/buy_button.html.twig' %}\n
{% endif %}\n
{% if offer.isFoodOnlineOrderAllowedOnSite() %}\n
<a id="deliveryBtn" href="{{ getLinkFoodOnlineOrder(offer) }}"\n
class="d-flex justify-content-center align-items-center text-uppercase button-by-code button">\n
Заказать онлайн {{ offer.getDiscount() }}\n
</a>\n
{% endif %}\n
{% if offer.isGiftCertificateOnlineOrderAllowedOnSite() %}\n
{% if offer.getID() == constant('Slivki\\Entity\\Offer::MINSK_WORLD_CERTIFICATE_OFFER_ID') %}\n
<a id="deliveryBtn" href="{{ getLinkGiftCertificateOnlineOrder(offer) }}"\n
class="d-flex justify-content-center align-items-center text-uppercase button-by-code button">\n
Получить скидку {{ offer.getDiscount() }}\n
</a>\n
{% elseif offer.getID() in constant('Slivki\\Entity\\Offer::FREESTYLE_OFFER_IDS') %}\n
<a id="deliveryBtn2"\n
href="{{ getLinkGiftCertificateOnlineOrderByOnlyCode(offer) }}"\n
class="d-flex justify-content-center align-items-center text-uppercase button-by-code button">\n
ПОЛУЧИТЬ СКИДКУ {{ offer.getDiscount() }}\n
</a>\n
{% elseif not offer.isFoodOnlineOrderAllowedOnSite() %}\n
<a id="deliveryBtn" href="{{ getLinkGiftCertificateOnlineOrder(offer) }}"\n
class="d-flex justify-content-center align-items-center text-uppercase button-by-code button">\n
Оплатить онлайн {{ offer.getDiscount() }}\n
</a>\n
{% endif %}\n
{% endif %}\n
{% if offer.isTireOnlineOrderAllowedOnSite() %}\n
<a id="deliveryBtn" href="{{ offer.getOnlineRegistrationLink() }}"\n
class="online-zapis d-flex justify-content-center align-items-center text-uppercase button-by-code button">\n
Онлайн-запись\n
</a>\n
{% endif %}\n
{% elseif isAllowedByOnlyCode %}\n
<div class="col">\n
{% include 'Slivki/offers/buy_button.html.twig' %}\n
</div>\n
{% endif %}\n
{% if not pastOffer and offer.isOnlineOrderGiftEnabled() and offer.getOnlineOrderSettings() is not null and offer.getOnlineOrderSettings().allowedPaymentMethods['delivery'][4] != 1 and isServerFeatureEnabled(constant('Slivki\\Enum\\SwitcherFeatures::SLIVKI_PAY'))\n
or not pastOffer and offer.isOnlineOrderGiftEnabled() and offer.getOnlineOrderSettings() is null and isServerFeatureEnabled(constant('Slivki\\Enum\\SwitcherFeatures::SLIVKI_PAY')) %}\n
<div class="col mb-2">\n
<a class="button-gift" data-toggle="modal" data-target="#choiceGiftModal">\n
<div class="button-gift-text">\n
<p>ЕДА В ПОДАРОК 😋</p>\n
<p>Подарю сам или подарят мне</p>\n
</div>\n
<div class="button-gift-item-button">\n
<div class="new">NEW</div>\n
</div>\n
</a>\n
</div>\n
{% endif %}\n
{% if not pastOffer and offer.isGiftCertificateOnlineOrderAllowedOnSite() and isServerFeatureEnabled(constant('Slivki\\Enum\\SwitcherFeatures::SLIVKI_PAY_FOR_CERTIFICATE'))\n
%}\n
<div class="col mb-3" style="width: 350px;margin: 0 auto">\n
{% if app.user %}\n
<a class="button-gift" href="/virtual-wallet-pay">\n
<div class="button-gift-text">\n
<p>ТЕПЕРЬ МОЖНО</p>\n
<p class="color-violet">ОПЛАТИТЬ SLIVKI.PAY</p>\n
</div>\n
<div class="button-gift-item-button">\n
<div class="new">NEW</div>\n
</div>\n
</a>\n
{% else %}\n
<a class="button-gift" data-toggle="modal" data-target=".modal-auth">\n
<div class="button-gift-text">\n
<p>ТЕПЕРЬ МОЖНО</p>\n
<p class="color-violet">ОПЛАТИТЬ SLIVKI.PAY</p>\n
</div>\n
<div class="button-gift-item-button">\n
<div class="new">NEW</div>\n
</div>\n
</a>\n
{% endif %}\n
</div>\n
{% endif %}\n
{% if offer.getOnlineOrderSettings() is not null and offer.getOnlineOrderSettings().allowedPaymentMethods['delivery'][4] == 1 and isServerFeatureEnabled(constant('Slivki\\Enum\\SwitcherFeatures::SLIVKI_PAY')) and not pastOffer and not offer.isOnlineOrderGiftEnabled() or\n
offer.getOnlineOrderSettings() is not null and offer.getOnlineOrderSettings().allowedPaymentMethods['pickup'][4] == 1 and isServerFeatureEnabled(constant('Slivki\\Enum\\SwitcherFeatures::SLIVKI_PAY')) and not pastOffer\n
and not offer.isOnlineOrderGiftEnabled()%}\n
<div class="col">\n
{% if app.user %}\n
<a class="button-gift" href="/virtual-wallet-pay">\n
<div class="button-gift-text">\n
<p>ТЕПЕРЬ МОЖНО</p>\n
<p class="color-violet">ОПЛАТИТЬ SLIVKI.PAY</p>\n
</div>\n
<div class="button-gift-item-button">\n
<div class="new">NEW</div>\n
</div>\n
</a>\n
{% else %}\n
<a class="button-gift" data-toggle="modal" data-target=".modal-auth">\n
<div class="button-gift-text">\n
<p>ТЕПЕРЬ МОЖНО</p>\n
<p class="color-violet">ОПЛАТИТЬ SLIVKI.PAY</p>\n
</div>\n
<div class="button-gift-item-button">\n
<div class="new">NEW</div>\n
</div>\n
</a>\n
{% endif %}\n
</div>\n
{% endif %}\n
{% endif %}\n
</div>\n
</div>\n
</div>\n
</div>\n
<div id="conditions_offers" class="d-flex" style="{{ pastOffer ? 'display: none!important' : '' }}">\n
<div class="content-wrapper-col-left pt-0">\n
{% 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 offer.isFoodOnlineOrderAllowedOnSite() or\n
offer.isFoodOnlineOrderAllowedOnSite() and offer.getOnlineOrderSettings() is not null and offer.getOnlineOrderSettings().allowedPaymentMethods['delivery'][4] == 1 and isServerFeatureEnabled(constant('Slivki\\Enum\\SwitcherFeatures::SLIVKI_PAY')) and offer.isOnlineOrderGiftEnabled()) %}\n
\n
<div class="d-flex mb-2" style="max-width: 625px;">\n
{% if not pastOffer and offer.getFreeCodesCount() > 0 and offer.isOnlineOrderGiftEnabled() and offer.isFoodOnlineOrderAllowedOnSite() %}\n
<div class="col mb-2 mr-2">\n
<a class="button-gift" data-toggle="modal" data-target="#choiceGiftModal">\n
<div class="button-gift-text">\n
<p>ЕДА В ПОДАРОК 😋</p>\n
<p>Подарю сам или подарят мне</p>\n
</div>\n
</a>\n
</div>\n
{% endif %}\n
{% 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 and offer.isOnlineOrderGiftEnabled() or\n
offer.getOnlineOrderSettings() is not null and offer.getOnlineOrderSettings().allowedPaymentMethods['pickup'][4] == 1 and isServerFeatureEnabled(constant('Slivki\\Enum\\SwitcherFeatures::SLIVKI_PAY')) and not pastOffer and offer.isOnlineOrderGiftEnabled()\n
or offer.isGiftCertificateOnlineOrderAllowedOnSite() and isServerFeatureEnabled(constant('Slivki\\Enum\\SwitcherFeatures::SLIVKI_PAY_FOR_CERTIFICATE'))\n
%}\n
<div class="col">\n
{% if app.user %}\n
<a class="button-gift" href="/virtual-wallet-pay">\n
<div class="button-gift-text">\n
<p>ТЕПЕРЬ МОЖНО</p>\n
<p class="color-violet">ОПЛАТИТЬ SLIVKI.PAY</p>\n
</div>\n
<div class="button-gift-item-button">\n
<div class="new">NEW</div>\n
</div>\n
</a>\n
{% else %}\n
<a class="button-gift" data-toggle="modal" data-target=".modal-auth">\n
<div class="button-gift-text">\n
<p>ТЕПЕРЬ МОЖНО</p>\n
<p class="color-violet">ОПЛАТИТЬ SLIVKI.PAY</p>\n
</div>\n
<div class="button-gift-item-button">\n
<div class="new">NEW</div>\n
</div>\n
</a>\n
{% endif %}\n
</div>\n
{% endif %}\n
</div>\n
{% endif %}\n
<div id="offersConditions" class="offers-conditions active" style="max-height: fit-content;">\n
<div class="offer-titles mb-2 mt-0"><h2>Условия</h2></div>\n
{% set isOfferFavourite = app.user ? app.user.isOfferFavourite(offer) : false %}\n
<div id="startOfOfferCondition"></div>\n
{% if offer.getID() != 239232 %}\n
{% endif %}\n
\n
{% if not offer.isWithoutCodes() and offer.getID() != 140553 %}\n
<p>\n
{% set codeTill = offer.getCodeActiveTill() %}\n
{% set codeFrom = offer.getActiveTill()|date_modify('-1 day') %}\n
{% set codeFrom = codeFrom > codeTill ? codeTill : codeFrom %}\n
{% if not offer.isHideFeatures() %}\n
- Получить промокод можно до {{ codeFrom|date('d.m') }}, воспользоваться {{ offer.getID() != 134390 ? 'до' }} {{ codeTill|date('d.m.y') }}\n
<br/>\n
{% endif %}\n
{% if offer.isShowPriceInConditions() and not offerIsFreeForUser %}\n
- Стоимость промокода: {{ codeCost }} руб.\n
{% endif %}\n
</p>\n
{% endif %}\n
\n
<div class="offer-details-conditions offers-conditions p-0">\n
{{ offer.getConditions()|raw }}\n
{# Таблица с прейскурантом для акции с квестами "Ящик Пандоры" #}\n
{% if offer.getID() == 143528 %}\n
{% include 'Slivki/offers/table_for_pandorra_box_offer2.html.twig' %}\n
{% elseif offer.getID() == 282234 %}\n
{% include 'Slivki/offers/table_for_pandorra_box_offer4.html.twig' %}\n
{% endif %}\n
{% if not offer.isWithoutCodes() %}\n
{% include "Slivki#{regional_template_path}/phrase_subscription_in_offer_page.html.twig" %}\n
{% endif %}\n
{% if not offer.isHideFeatures() %}\n
</br>\n
<div class="offer-titles mb-2 mt-0"><h2>Особенности</h2></div>\n
<div class="offer-details-conditions">\n
{% if not offer.isWithoutCodes() %}\n
- Скидка предоставляется только при наличии промокода.\n
{% endif %}\n
{{ offer.getFeatures()|raw }}\n
</div>\n
- Поставщик несет полную ответственность перед потребителем за достоверность информации.\n
{% endif %}\n
</div>\n
<div id="endOfOfferCondition"></div>\n
<div class="clear"></div>\n
</div>\n
{% if offer.getShopMedias()|length > 0 %}\n
<div class="offer-titles mb-2 mt-0"><h2>Галерея</h2></div>\n
{% endif %}\n
<div id="offerConditionsSlider"\n
class="my-4 screenshots {{ offer.getShopMedias()|length == 0 or freeCodesCount == 0 ? 'empty' }}">\n
{% if offer.getShopMedias()|length > 0 %}\n
<div class="screenshot-container">\n
{% if galleryVideos.getVideos() is defined and galleryVideos.getVideos()|length > 0 %}\n
<div class="screenshot screenshot-story" data-toggle="modal"\n
data-target="#detailsStoryPopup">\n
<img src="{{ galleryVideos.getImageUrl() }}" width="300"\n
alt="Видео" border="0"/>\n
<div class="screenshot-story-btn"></div>\n
<div class="screenshot-story-tittle">{{ galleryVideos.getTitle() }}</div>\n
</div>\n
{% endif %}\n
{% for media in offer.getShopMedias() %}\n
<div class="screenshot">\n
<a href="{{ getImageURL(media, 0, 0) }}" title="{{ media.getDescription() }}"\n
data-lightbox="image">\n
<img src="{{ getImageURL(media, 300, 0) }}" width="300"\n
alt="{{ media.getDescription() }}" border="0"/>\n
</a>\n
</div>\n
{% endfor %}\n
</div>\n
{% endif %}\n
</div>\n
<div id="examplesOfWorksBlock" class="">\n
<div class="headerBlockCategory examples d-none bg-white px-0 pb-0 bg-transpanent examples-block-offer-header">\n
<div class="offer-titles"><h5 class="m-0">Фото\n
работ{# <div class="example-of-works-count-container"><span>1234</span></div> #}</h5>\n
</div>\n
<div class="examples-works-tooltip-filter">\n
<div class="tooltip-content">\n
<div class="tooltip-title border-bottom-f d-flex">Показать сначала:</div>\n
{% for key,sortItem in constant('Slivki\\Paginator\\WorkExample\\WorkExamplePaginatorInterface::SORT') %}\n
<div class="radio">\n
<input id="filter{{ key }}" type="radio" name="filter"\n
data-direction="{{ sortItem.direction }}"\n
value="{{ sortItem.field }}" {{ loop.first ? 'checked' }}>\n
<label for="filter{{ key }}"\n
class="cursor-pointer">{{ sortItem.name }}</label>\n
</div>\n
{% endfor %}\n
<div class="tooltip-title border-top-f d-flex">Диапазон цены:</div>\n
<div id="workExamplePriceRangeInputs" class="price-range-inputs d-flex">\n
<div class="price-range-input"><input type="number" placeholder="Цена от"\n
id="priceFrom" name="priceFrom" min="0"\n
max="199" step="1"></div>\n
<div class="price-range-input"><input type="number" placeholder="Цена до"\n
id="priceTo" name="priceTo" min="0"\n
max="200" step="1"></div>\n
</div>\n
<div id="workExampleRangeSlider" class="range-slider">\n
<div class="range-labels">\n
<span id="workSimplesRangeLableStart"\n
class="range-label range-label-start"></span>\n
<span>-</span>\n
<span id="workSimplesRangeLableEnd"\n
class="range-label range-label-end"></span>\n
</div>\n
<input class="work-simples-input" type="range" name="startRange"\n
id="startRange">\n
<input class="work-simples-input" type="range" name="finishRange"\n
id="finishRange">\n
\n
<div class="track-wrapper">\n
<div class="track"></div>\n
<div id="workSimplesSliderBetween" class="range-between"></div>\n
<div id="workSimplesTumbLeft" class="thumb left"></div>\n
<div id="workSimplesTumbRight" class="thumb right"></div>\n
</div>\n
</div>\n
<div id="buttonFilterBoxExamplesWork" class="buttonFilterBox">Показать</div>\n
</div>\n
<div id="buttonFilterBoxExamplesWork" class="d-flex cursor-pointer">Сортировка<img\n
width="25" class="pl-2" src="/images/sort_image.svg"/></div>\n
</div>\n
</div>\n
{% include 'Slivki/works-examples/examples_of_works_gallery.html.twig' %}\n
</div>\n
<div id="beautyMastersBlock" class="beauty-masters-container beauty-masters-offer desk">\n
<div id="beautyMastersHeader"\n
class="tittleBlockCategory position-relative offer-titles mb-2 mt-0 d-none"><h2>\n
{{ parentCategoryList and parentCategoryList[0].getID() == constant('Slivki\\Entity\\Category::MEDICAL_CENTER_CATEGORY_ID') ? 'Врачи' : 'Найти своего мастера' }}</h2>\n
</div>\n
{% include 'Slivki/beauty/beauty_masters.html.twig' %}\n
</div>\n
<div id="offersDescription" class="offers-conditions mt-3">\n
{% if offer.isShowProductsInOfferDescription() %}\n
<div id="foodItemsBlock">\n
<div class="offer-titles mb-2 mt-0"><h2>Описание</h2></div>\n
{% if isPickupEnabled and isDeliveryEnabled %}\n
<div id="fixedFiltersOffer" class="w-auto px-2 d-flex"\n
style="position: relative;background: linear-gradient(180deg, #A839FF 0%, #6747e5 100%), #6747E5;border-radius: 8px;padding: 10px 0;">\n
<div class="col d-flex align-items-center text-white justify-content-end px-0"></div>\n
<div class="switch-delivery-pickup-block px-0 ">\n
<a data-type-delivery="1"\n
class="switch-delivery-pickup-item button-tab-delivery delivery-type active">\n
<p class="m-0">Доставка</p>\n
<small>удобно👌</small>\n
</a>\n
<a data-type-delivery="2"\n
class="switch-delivery-pickup-item pickup-type button-tab-pickup">\n
<p class="m-0"> Самовывоз</p>\n
<small>еще дешевле🔥</small>\n
</a>\n
</div>\n
</div>\n
{% endif %}\n
\n
<div id="foodBlock"></div>\n
<div id="foodOptionsBlock"></div>\n
</div>\n
{% endif %}\n
<div class="description" id="descriptionText">\n
{% for offerDescription in offer.getDescriptionList() %}\n
\n
{% set offerDescriptionSliderImages = offerDescription.getEntityDescriptionSliderImages() %}\n
{% if offerDescriptionSliderImages|length > 0 %}\n
<div class="sale-description-carousel">\n
<div id="saleDescriptionSliderFor{{ offerDescription.getID() }}"\n
class="sale-description-slider-for">\n
{% for offerDescriptionSliderImage in offerDescriptionSliderImages %}\n
<div><img data-lazy="{{ offerDescriptionSliderImage.getImageUrl() }}"/>\n
</div>\n
{% endfor %}\n
</div>\n
</div>\n
{% endif %}\n
{{ addLazyAndLightboxImagesInDescription(offerDescription.getDescription())|raw }}\n
{# <div id="showMoreDescription" #}\n
{# class="{{ addLazyAndLightboxImagesInDescription(offerDescription.getDescription())|raw == "" or addLazyAndLightboxImagesInDescription(offerDescription.getDescription())|raw == '<p><span style="color: #ecf0f1;">.</span></p>' ? 'd-none' : "" }}"> #}\n
{# <div class="w-100 position-absolute bottom-0" #}\n
{# style="background: linear-gradient(360deg, #FFFFFF 15.15%, rgba(255, 255, 255, 0) 206.06%);"></div> #}\n
{# <p class="w-100 position-absolute bottom-0">Подробнее</p> #}\n
{# </div> #}\n
{% endfor %}\n
</div>\n
\n
</div>\n
<div class="tab-pane fade" id="offerLocationTab">\n
<i class="fa fa-spinner fa-spin"></i>\n
</div>\n
<div id="offersReview" class="offers-review">\n
{{ comments|raw }}\n
</div>\n
</div>\n
<div class="content-wrapper-col-right">\n
<div id="conditionAddress">\n
<div class="offer-titles mb-2 mt-0"><h2>Контакты</h2></div>\n
<div style="display:none">{{ offer.getAddress() }}</div>\n
<div id="offerConditionLogo">\n
{{ offer.getLogo()|raw }}\n
</div>\n
<div id="dataFromLocation">\n
<div class="move-data">\n
{% if geoLocations|length > 0 %}\n
<div class="geo-location-block" style="display: block">\n
{% include 'Slivki/offers/geo_location_data.html.twig' with {'offer': offer} only %}\n
<div id="offerGeoLocationData" data-json="{{ offerGeoLocationData }}"></div>\n
<div class="distance d-none">\n
<i class="slivki-icon slivki-icon-direction"></i> <img class='ajaxLoader'\n
src='/images/ajax-loader-16x16.gif'\n
alt='Загрузка...'/><span></span>\n
</div>\n
<div class="offer-details-map category-map-wrapper category-map"\n
id="offerMapCanvas">\n
<div id="mapCollapseBtn" class="button button--map-collapse capsuled"\n
onclick="offerMapToggleSize();">Развернуть\n
</div>\n
<a id="setUserLocationBtn" href="#" class="capsuled">Указать\n
местоположение</a>\n
<div id="zoomIn"></div>\n
<div id="zoomOut"></div>\n
</div>\n
</div>\n
{% endif %}\n
<div class="before-map" style="clear:both;"></div>\n
</div>\n
</div>\n
{% if (offer.getLocation()|preg_replace("/<[^>]*>/", '')|replace({"\n": '', "\r": '', ' ': '', ' ': ''}) != '') %}\n
{{ offer.getLocation()|raw }}\n
{% set phoneNumbers = offer.getPhoneNumbers() %}\n
{% if phoneNumbers.count() > 0 %}\n
<div class="text-bold">Телефон{{ phoneNumbers.count() > 1 ? 'ы' }}:</div>\n
{% endif %}\n
{% for phoneNumber in phoneNumbers %}\n
{{ phoneNumber.getNumber() }} {{ phoneNumber.getLabel() }}<br/>\n
{% endfor %}\n
{% else %}\n
{% set geoLocationsCount = geoLocations.count() %}\n
{% set commonWoringHours = offer.getCommonWorkingHours() %}\n
{% if commonWoringHours != '' %}\n
<br>\n
<div class="text-bold">Время работы:</div>\n
{{ commonWoringHours|raw }}\n
{% endif %}\n
{% for geoLocation in geoLocations %}\n
{% set margin = false %}\n
<div class="offer-details-geolocation-item my-3">\n
<div class="font-bold font-size-17">г. {{ geoLocation.getCity() }}\n
, {{ geoLocation.getStreet() }}, {{ geoLocation.getHouse() }}\n
<br>{{ geoLocation.getLabel() }}</div>\n
<div class="location-more-info {{ geoLocationsCount > 2 ? 'hidden' }}">\n
{% if geoLocation.getWorkingHours()|trim != '' %}\n
{% set margin = true %}\n
<div class="offer-details-work-hours">Время работы:\n
</div> {{ geoLocation.getWorkingHours()|nl2br|raw }}\n
{% endif %}\n
{% set phoneNumbers = geoLocation.getPhoneNumbers() %}\n
{% if phoneNumbers.count() > 0 %}\n
{% set margin = true %}\n
<span>\n
<div class="offer-details-phone-item">\n
<div class="full-phone-item">\n
{% for phoneNumber in phoneNumbers %}\n
{{ phoneNumber.getNumber() }} {{ phoneNumber.getLabel() }}<br/>\n
{% endfor %}\n
</div>\n
</div>\n
{% endif %}\n
{% if margin %}\n
<br>\n
{% endif %}\n
</span>\n
{% if geoLocation.getCallbackChatId() and geoLocation.getCallbackChatId() != '' %}\n
<div class="callback-button" data-id="{{ geoLocation.getId() }}">Обратный звонок</div>\n
{% endif %}\n
</div>\n
{% if geoLocationsCount > 2 %}\n
<a data-id="{{ geoLocation.getID() }}"\n
class="text-slivki location-more-info-toggle">Подробнее</a>\n
{% endif %}\n
\n
</div>\n
{% endfor %}\n
{# {% if geoLocationsCount > 4 %} #}\n
{# <div class="text-center"> #}\n
{# <a id="showMoreAddressInDetailsLink" class="button" href="#">Еще адреса</a> #}\n
{# </div> #}\n
{# {% endif %} #}\n
\n
{% set phoneNumbersWithoutGeoLocations = offer.getPhoneNumbersWithoutGeoLocations() %}\n
{% if phoneNumbersWithoutGeoLocations|length > 0 %}\n
<div class="text-bold">Телефон{{ phoneNumbersWithoutGeoLocations|length > 1 ? 'ы' }}:\n
</div>\n
<div class="offer-details-phone-item">\n
<div class="full-phone-item">\n
{% for phoneNumber in phoneNumbersWithoutGeoLocations %}\n
{{ phoneNumber.getNumber() }} {{ phoneNumber.getLabel() }}<br/>\n
{% endfor %}\n
</div>\n
</div>\n
{% if phoneNumber is defined and phoneNumber.getCallbackChatId() and phoneNumber.getCallbackChatId() != '' %}\n
<div class="callback-button" data-id="{{ phoneNumber.getId() }}">Обратный звонок</div>\n
{% endif %}\n
{% endif %}\n
\n
{% endif %}\n
<div id="phoneOffersBlock" class="offer-details-legal-info">{{ offer.getLegal()|raw }}</div>\n
<div class="offer-titles offer-titles-mobile mt-0 mb-0"><h5 class="mt-0 mb-0">Написать</h5>\n
</div>\n
<div class="col px-0">\n
<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"\n
href="https://t.me/{{ offer.getTelegram() != null ? offer.getTelegram() : 'slivkislivkiby' }}"\n
style="width: 200px">\n
<img class="mr-2" src="/images/tg.svg" width="20" height="18">\n
<span class="float-right">Telegram</span>\n
</a>\n
{% set viberNumber = offer.getViber() != null ? offer.getViber() : '+375295084444' %}\n
<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"\n
href='viber://chat?number=" {{ viberNumber }} "' style="width: 200px">\n
<img class="mr-2" src="/images/vb.svg" width="20" height="18">\n
<span class="float-right">Viber</span>\n
</a>\n
</div>\n
</div>\n
{% include 'Slivki/offers/share.html.twig' %}\n
{% include "Slivki#{regional_template_path}/jivosite/button_offers_page.html.twig" %}\n
<p class="tittle-messenger-offers d-none">Мы всегда рады помочь: служба поддержки Slivki.by ответит\n
на\n
любой\n
ваш вопрос</p>\n
</div>\n
</div>\n
\n
</div>\n
{% if (pastOffer or freeCodesCount == 0) and relatedOfferListHtml is defined %}\n
<div class="col px-3">\n
<div class="related-offers-title">Другие похожие предложения:</div>\n
<div class="related-offers-list stock-group-list">\n
{{ relatedOfferListHtml|raw }}\n
</div>\n
</div>\n
{% endif %}\n
</div>\n
{% if lastPurchaseText is defined %}\n
<div id="lastPurchaseNofify"><a href="#"><i class="slivki-icon-close-thin"></i></a>Последний раз промокод<br>получен {{ lastPurchaseText }}\n
</div>\n
{% endif %}\n
{% endblock %}\n
\n
{% block popups %}\n
{{ parent() }}\n
{% if not pastOffer %}\n
{% include 'Slivki/popups/header_offers.html.twig' %}\n
{% endif %}\n
{% include 'Slivki/share_block.html.twig' %}\n
{% include 'Slivki/popups/callback.html.twig' %}\n
{% include 'Slivki/offers/complaint.html.twig' %}\n
{% include 'Slivki/orderAsGift/foodForGift.html.twig' %}\n
{% if galleryVideos.getVideos() is defined and galleryVideos.getVideos()|length > 0 %}\n
{% include 'Slivki/popups/details-story-popup.html.twig' %}\n
{% endif %}\n
{% include 'Slivki/popups/comment_media_block_popup.html.twig' %}\n
{% include 'Slivki/popups/statistics_popup.html.twig' %}\n
{% include 'Slivki/mobile/popup/buy_codes_avways_app.html.twig' %}\n
{% include 'Slivki/delivery/modal/details.html.twig' with {'isOfferPage': true} %}\n
{% if offer.isGiftCertificateOffer() %}\n
{% include 'Slivki/popups/step_buy_certificate.twig' with {'deliveryLink': deliveryLink} %}\n
{% endif %}\n
{% if app.user %}\n
{% include 'Slivki/popups/mail_offers.html.twig' %}\n
{% include 'Slivki/popups/rating_edit_popup.html.twig' %}\n
{% include 'Slivki/popups/popup_subscription_limited.html.twig' %}\n
{% if not isMobileDevice() or offerIsFreeForUser %}\n
{% if not codeCostInCurrency is defined and codeCostInCurrency is not null %}\n
{% set codeCostInCurrency = null %}\n
{% endif %}\n
{% include 'Slivki/popups/confirm_box.html.twig' with {'codeCost': codeCost, 'offerID': offer.getID(), 'codeCostInCurrency': codeCostInCurrency} %}\n
{% include 'Slivki/popups/confirm_subscription_card_popup.html.twig' with {'creditCards': app.user.getActiveCreditCards()} %}\n
{% endif %}\n
\n
{% if not isMobileDevice() %}\n
{% include 'Slivki/popups/add_comment_popup.html.twig' with {'id': 'addVoteBox'} %}\n
{% include 'Slivki/popups/edit_comment_popup.html.twig' with {'id': 'editVoteBox'} %}\n
{% include 'Slivki/popups/comment_censor_message.html.twig' with {'id': 'commentCensorMessage'} %}\n
{% endif %}\n
{% else %}\n
{% if not isMobileDevice() %}\n
{% include 'Slivki/popups/comment_only_registered_popup.html.twig' with {'id': 'onlyRegistered'} %}\n
{% endif %}\n
{% endif %}\n
{% endblock %}\n
\n
{% block javascripts %}\n
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.lazyload/1.9.1/jquery.lazyload.min.js"\n
integrity="sha512-jNDtFf7qgU0eH/+Z42FG4fw3w7DM/9zbgNPe3wfJlCylVDTT3IgKW5r92Vy9IHa6U50vyMz5gRByIu4YIXFtaQ=="\n
crossorigin="anonymous" referrerpolicy="no-referrer"></script>\n
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.js"></script>\n
<script src="//api-maps.yandex.ru/2.1.29/?lang=ru-RU" type="text/javascript"></script>\n
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>\n
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/locale/ru.min.js"\n
integrity="sha512-QezkC2mljFGA2zQBPe+FrNA7i2RVFaYOfdQHk6icEap1TZX/Q6MNx+0AOTr9msSec0LsMrpURxfgJSbodYoiLg=="\n
crossorigin="anonymous"></script>\n
<script src="https://cdnjs.cloudflare.com/ajax/libs/fecha/2.3.3/fecha.min.js"></script>\n
<script src="/js/hotel-datepicker-3.6.5/hotel-datepicker.min.js"></script>\n
<script src="/js/swiper-js/swiper.min.js"></script>\n
<script src="/js/story-slider/story-slider-js.js?v={{ story_slider_js_version }}"></script>\n
{{ parent() }}\n
<script src="/js/offer.js?v={{ offer_js_version }}"></script>\n
<script src="/js/offer/offerDescriptionItems.js?v={{ offer_description_items_js_version }}"></script>\n
<script src="/js/common-old.js?v={{ common_old_js_version }}"></script>\n
<script type="text/javascript">\n
{% if preview is defined and preview %}\n
var offerPreview = 1;\n
{% else %}\n
var offerPreview = 0;\n
{% endif %}\n
{% if app.request.query.has('checkOrder') %}\n
initCheckOfferOrderStatus({{ app.request.get('checkOrder') }});\n
{% endif %}\n
</script>\n
<script src="/js/offer-new.js?v={{ offer_new_js_version }}"/>\n
{% endblock %}\n
{% block assetsBottom %}\n
{{ parent() }}\n
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-toast-plugin/1.3.2/jquery.toast.min.js"\n
integrity="sha512-zlWWyZq71UMApAjih4WkaRpikgY9Bz1oXIW5G0fED4vk14JjGlQ1UmkGM392jEULP8jbNMiwLWdM8Z87Hu88Fw=="\n
crossorigin="anonymous" referrerpolicy="no-referrer"></script>\n
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.37/js/bootstrap-datetimepicker.min.js"\n
integrity="sha512-Y+0b10RbVUTf3Mi0EgJue0FoheNzentTMMIE2OreNbqnUPNbQj8zmjK3fs5D2WhQeGWIem2G2UkKjAL/bJ/UXQ=="\n
crossorigin="anonymous" referrerpolicy="no-referrer"></script>\n
{# <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>#}\n
<script type="text/javascript" src="//yastatic.net/share2/share.js" charset="utf-8"></script>\n
<script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script>\n
<script type="text/javascript" src="/js/statistics_offer/statistics_offer.js?v={{ statistics_offer_js_version }}"\n
charset="utf-8"></script>\n
<script src="https://cdnjs.cloudflare.com/ajax/libs/easy-pie-chart/2.1.6/jquery.easypiechart.min.js"\n
integrity="sha512-DHNepbIus9t4e6YoMBSJLwl+nnm0tIwMBonsQQ+W9NKN6gVVVbomJs9Ii3mQ+HzGZiU5FyJLdnAz9a63ZgZvTQ=="\n
crossorigin="anonymous" referrerpolicy="no-referrer"></script>\n
<script src="https://cdnjs.cloudflare.com/ajax/libs/easy-pie-chart/2.1.6/easypiechart.min.js"\n
integrity="sha512-1yldf7W5suy0ko2u4OGU1qyeGrzh9+A3uyWGH4ws8MbndaWxZsgnzy6uqqBq7NUU/ImI1Js5kqDbunovCN1JqA=="\n
crossorigin="anonymous" referrerpolicy="no-referrer"></script>\n
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.4/dist/Chart.min.js"></script>\n
<script type="module" src="/js/work_examples/work_examples.js?v={{ work_examples_js_version }}"></script>\n
<script type="module" src="/js/beauty/masters.js?v={{ beauty_masters_js_version }}"></script>\n
\n
{% endblock %}\n
\n
{% block RTBHouse %}\n
<script>\n
try {\n
(function () {\n
var prefix = "", hash = "TS5TS2S9bdSbgKBA4Q2H", rtbhTags = [];\n
rtbhTags.push("pr_" + hash + "_offer_" + document.getElementById('offerID').value);\n
rtbhTags.push("pr_" + hash + "_uid_" + document.getElementById('rtbhUID').value);\n
var key = "__rtbhouse.lid", lid = window.localStorage.getItem(key);\n
if (!lid) {\n
lid = "";\n
var pool = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";\n
for (var i = 0; i < 20; i++) lid += pool.charAt(Math.floor(Math.random() * pool.length));\n
window.localStorage.setItem(key, lid);\n
}\n
rtbhTags.push("pr_" + hash + "_lid_" + lid);\n
var ifr = document.createElement("iframe"),\n
sr = encodeURIComponent(document.referrer ? document.referrer : ""),\n
su = encodeURIComponent(document.location.href ? document.location.href : ""),\n
ifrSrc = "https://" + prefix + "creativecdn.com/tags?type=iframe",\n
tmstmp = encodeURIComponent("" + Date.now());\n
for (var i = 0; i < rtbhTags.length; i++) {\n
ifrSrc += "&id=" + encodeURIComponent(rtbhTags[i]);\n
}\n
ifrSrc += "&su=" + su + "&sr=" + sr + "&ts=" + tmstmp;\n
ifr.setAttribute("src", ifrSrc);\n
ifr.setAttribute("width", "1");\n
ifr.setAttribute("height", "1");\n
ifr.setAttribute("scrolling", "no");\n
ifr.setAttribute("frameBorder", "0");\n
ifr.setAttribute("style", "display:none");\n
ifr.setAttribute("referrerpolicy", "no-referrer-when-downgrade");\n
if (document.body) {\n
document.body.appendChild(ifr);\n
} else {\n
window.addEventListener('DOMContentLoaded', function () {\n
document.body.appendChild(ifr);\n
});\n
}\n
})();\n
} catch (e) {\n
} </script>\n
{% endblock %}
"""
#message: "Key "4" for array with keys "1, 2, 3" does not exist."
#code: 0
#file: "/mnt/data/virtwww/test/templates/Slivki/offers/details.html.twig"
#line: 347
trace: {
/mnt/data/virtwww/test/templates/Slivki/offers/details.html.twig:347 {
twig_get_attribute(Environment $env, Source $source, $object, $item, array $arguments = [], $type = 'any', $isDefinedTest = false, $ignoreStrictCheck = false, $sandboxed = false, int $lineno = -1) …
› {% endif %}
› {% if offer.getOnlineOrderSettings() is not null and offer.getOnlineOrderSettings().allowedPaymentMethods['delivery'][4] == 1 and isServerFeatureEnabled(constant('Slivki\\Enum\\SwitcherFeatures::SLIVKI_PAY')) and not pastOffer and not offer.isOnlineOrderGiftEnabled() or
› offer.getOnlineOrderSettings() is not null and offer.getOnlineOrderSettings().allowedPaymentMethods['pickup'][4] == 1 and isServerFeatureEnabled(constant('Slivki\\Enum\\SwitcherFeatures::SLIVKI_PAY')) and not pastOffer
}
/mnt/data/virtwww/test/var/cache/dev/twig/24/24c9fd930e4d3200574d30f7dd19b720fd65986c581dc5df76e4c8e28d9b431a.php:860 {
__TwigTemplate_671d188d41c559f3e4b20d04dd0901420d5734d6d8780fb2ae46a6d677382c91->block_main_content($context, array $blocks = []) …
› echo " ";
› if (((((( !(null === twig_get_attribute($this->env, $this->source, (isset($context["offer"]) || array_key_exists("offer", $context) ? $context["offer"] : (function () { throw new RuntimeError('Variable "offer" does not exist.', 347, $this->source); })()), "getOnlineOrderSettings", [], "method", false, false, false, 347)) && (0 === twig_compare(twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, (isset($context["offer"]) || array_key_exists("offer", $context) ? $context["offer"] : (function () { throw new RuntimeError('Variable "offer" does not exist.', 347, $this->source); })()), "getOnlineOrderSettings", [], "method", false, false, false, 347), "allowedPaymentMethods", [], "any", false, false, false, 347), "delivery", [], "array", false, false, false, 347), 4, [], "array", false, false, false, 347), 1))) && $this->env->getRuntime('Slivki\Twig\ServerFeatureStateTwigRuntime')->isServerFeatureEnabled(twig_constant("Slivki\\Enum\\SwitcherFeatures::SLIVKI_PAY"))) && !(isset($context["pastOffer"]) || array_key_exists("pastOffer", $context) ? $context["pastOffer"] : (function () { throw new RuntimeError('Variable "pastOffer" does not exist.', 347, $this->source); })())) && !twig_get_attribute($this->env, $this->source, (isset($context["offer"]) || array_key_exists("offer", $context) ? $context["offer"] : (function () { throw new RuntimeError('Variable "offer" does not exist.', 347, $this->source); })()), "isOnlineOrderGiftEnabled", [], "method", false, false, false, 347)) || (((( !(null === twig_get_attribute($this->env, $this->source, // line 348
› (isset($context["offer"]) || array_key_exists("offer", $context) ? $context["offer"] : (function () { throw new RuntimeError('Variable "offer" does not exist.', 348, $this->source); })()), "getOnlineOrderSettings", [], "method", false, false, false, 348)) && (0 === twig_compare(twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, (isset($context["offer"]) || array_key_exists("offer", $context) ? $context["offer"] : (function () { throw new RuntimeError('Variable "offer" does not exist.', 348, $this->source); })()), "getOnlineOrderSettings", [], "method", false, false, false, 348), "allowedPaymentMethods", [], "any", false, false, false, 348), "pickup", [], "array", false, false, false, 348), 4, [], "array", false, false, false, 348), 1))) && $this->env->getRuntime('Slivki\Twig\ServerFeatureStateTwigRuntime')->isServerFeatureEnabled(twig_constant("Slivki\\Enum\\SwitcherFeatures::SLIVKI_PAY"))) && !(isset($context["pastOffer"]) || array_key_exists("pastOffer", $context) ? $context["pastOffer"] : (function () { throw new RuntimeError('Variable "pastOffer" does not exist.', 348, $this->source); })())) && !twig_get_attribute($this->env, $this->source, // line 349
}
/mnt/data/virtwww/test/vendor/twig/twig/src/Template.php:171 {
Twig\Template->displayBlock($name, array $context, array $blocks = [], $useBlocks = true, self $templateContext = null) …
› try {
› $template->$block($context, $blocks);
› } catch (Error $e) {
}
/mnt/data/virtwww/test/templates/base.html.twig:193 {
__TwigTemplate_abb07d9b1851dfdfa4f8e93404dd8ff108c80b7b1ae88cb1b556ff027f2b15c5->block_content($context, array $blocks = []) …
› <div class="content-wrapper">
› {% block main_content %}{% endblock %}
› </div>
}
/mnt/data/virtwww/test/vendor/twig/twig/src/Template.php:171 {
Twig\Template->displayBlock($name, array $context, array $blocks = [], $useBlocks = true, self $templateContext = null) …
› try {
› $template->$block($context, $blocks);
› } catch (Error $e) {
}
/mnt/data/virtwww/test/templates/base.html.twig:184 {
__TwigTemplate_abb07d9b1851dfdfa4f8e93404dd8ff108c80b7b1ae88cb1b556ff027f2b15c5->doDisplay(array $context, array $blocks = []) …
›
› {% block content %}
› <div class="content container transparent with-banner {% block contentContainerClass %}{% endblock %}" id="contentContainer">
}
/mnt/data/virtwww/test/vendor/twig/twig/src/Template.php:394 {
Twig\Template->displayWithErrorHandling(array $context, array $blocks = []) …
› try {
› $this->doDisplay($context, $blocks);
› } catch (Error $e) {
}
/mnt/data/virtwww/test/vendor/twig/twig/src/Template.php:367 {
Twig\Template->display(array $context, array $blocks = []) …
› {
› $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
› }
}
/mnt/data/virtwww/test/var/cache/dev/twig/24/24c9fd930e4d3200574d30f7dd19b720fd65986c581dc5df76e4c8e28d9b431a.php:63 {
__TwigTemplate_671d188d41c559f3e4b20d04dd0901420d5734d6d8780fb2ae46a6d677382c91->doDisplay(array $context, array $blocks = []) …
› $this->parent = $this->loadTemplate("base.html.twig", "Slivki/offers/details.html.twig", 1);
› $this->parent->display($context, array_merge($this->blocks, $blocks));
›
}
/mnt/data/virtwww/test/vendor/twig/twig/src/Template.php:394 {
Twig\Template->displayWithErrorHandling(array $context, array $blocks = []) …
› try {
› $this->doDisplay($context, $blocks);
› } catch (Error $e) {
}
/mnt/data/virtwww/test/vendor/twig/twig/src/Template.php:367 {
Twig\Template->display(array $context, array $blocks = []) …
› {
› $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
› }
}
/mnt/data/virtwww/test/vendor/twig/twig/src/Template.php:379 {
Twig\Template->render(array $context) …
› try {
› $this->display($context);
› } catch (\Throwable $e) {
}
/mnt/data/virtwww/test/vendor/twig/twig/src/TemplateWrapper.php:40 {
Twig\TemplateWrapper->render(array $context = []): string …
› // as it should only be used by internal code
› return $this->template->render($context, \func_get_args()[1] ?? []);
› }
}
/mnt/data/virtwww/test/vendor/twig/twig/src/Environment.php:280 {
Twig\Environment->render($name, array $context = []): string …
› {
› return $this->load($name)->render($context);
› }
}
/mnt/data/virtwww/test/vendor/symfony/framework-bundle/Controller/AbstractController.php:258 {
Symfony\Bundle\FrameworkBundle\Controller\AbstractController->renderView(string $view, array $parameters = []): string …
›
› return $this->container->get('twig')->render($view, $parameters);
› }
}
/mnt/data/virtwww/test/src/Controller/DefaultController.php:943 {
Slivki\Controller\DefaultController->detailsAction(Request $request, BannerService $bannerService, OfferCacheService $offerCacheService, CacheService $cacheService, $entityID, ImageService $imageService, SubscriptionService $subscriptionService, GiftCertificateDaoInterface $giftCertificateDao, ServerFeatureStateChecker $serverFeatureStateChecker, VideoPackageDtoGetter $videoPackageDtoGetter, CityProvider $cityProvider, PurchaseCountWithCorrectionDaoInterface $purchaseCountWithCorrectionDao, FavouriteOfferDaoInterface $favouriteOfferDao) …
› $view = $isMobile ? 'Slivki/mobile/offer/details.html.twig' : 'Slivki/offers/details.html.twig';
› $response->setContent($this->renderView($view, $data));
›
}
/mnt/data/virtwww/test/vendor/symfony/http-kernel/HttpKernel.php:163 {
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Request $request, int $type = self::MAIN_REQUEST): Response …
› // call controller
› $response = $controller(...$arguments);
›
}
/mnt/data/virtwww/test/vendor/symfony/http-kernel/HttpKernel.php:75 {
Symfony\Component\HttpKernel\HttpKernel->handle(Request $request, int $type = HttpKernelInterface::MAIN_REQUEST, bool $catch = true) …
› try {
› return $this->handleRaw($request, $type);
› } catch (\Exception $e) {
}
/mnt/data/virtwww/test/vendor/symfony/http-kernel/Kernel.php:202 {
Symfony\Component\HttpKernel\Kernel->handle(Request $request, int $type = HttpKernelInterface::MAIN_REQUEST, bool $catch = true) …
› try {
› return $this->getHttpKernel()->handle($request, $type, $catch);
› } finally {
}
/mnt/data/virtwww/test/public/index.php:30 {
› $request = Request::createFromGlobals();
› $response = $kernel->handle($request);
› $response->send();
}
}
} |