templates/base.html.twig line 1

Open in your IDE?
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     {% set metaInfo = getMetaInfo() %}
  5.     {% block meta %}
  6.         {% include "Slivki#{regional_template_path}/meta_block.html.twig" %}
  7.     {% endblock %}
  8.     {% block ogimage %}
  9.         <meta property="og:image" content="/images/b180x180.jpg" />
  10.         <meta property="og:image:width" content="180"/>
  11.         <meta property="og:image:height" content="180"/>
  12.     {% endblock %}
  13.     {% block stylesheets %}
  14.         <link rel="stylesheet" href="/css/intTelInput.css?v=5" />
  15.         <link href="/css/jform-styler/vanillaSelectBox.css" rel="stylesheet">
  16.         <link href="/css/delivery.min.css?v={{ delivery_css_version }}" rel="stylesheet" type="text/css" />
  17.         <link href="/css/flowersHotLent.css?v={{ flowers_hot_lent_css_version }}" rel="stylesheet" type="text/css" />
  18.         <link rel="stylesheet" href="/css/beauty/beauty-masters.css?v={{ beauty_masters_css_version }}" type="text/css"/>
  19.         <link href="/css/style.min.css?v={{ style_css_version }}" rel="stylesheet" type="text/css" />
  20.         <link href="/js/jgallery-1.5.5/dist/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
  21.         <link rel="stylesheet" href="/css/slick.min.css"/>
  22.         <link rel="stylesheet" href="/css/slick-theme.min.css" />
  23.         <link rel="stylesheet" href="/css/slider_preview.css?v={{ slider_preview_css_version }}" />
  24.         <link rel="stylesheet" href="/css/botstrap-dropdowns-v3/dropdowns.css"/>
  25.         <link rel="stylesheet" href="/css/cookies.css"/>
  26.         {% if isMobileDevice() %}
  27.             <link href="/css/header_mobile.css?v={{ header_mobile_css_version }}" rel="stylesheet" type="text/css" />
  28.         {% endif %}
  29.         {% if app.request.getPathInfo() == '/profile' %}
  30.             <link href="/css/crt-fonts.css?v={{ crt_fonts_css_version }}" rel="stylesheet" type="text/css" />
  31.             <link href="/css/certificate-creator/certificate-creator.css" rel="stylesheet" type="text/css" />
  32.         {% endif %}
  33.         <link href="/css/new_popup.css?v={{ new_popup_css_version }}" rel="stylesheet" type="text/css" />
  34.         <link rel="stylesheet" href="/css/jquery.toast.min.css" />
  35.         <link href="/css/slivkiPay.css?v=1" rel="stylesheet" type="text/css" />
  36.     {% endblock %}
  37.     {% block favicon %}
  38.         <link type="image/x-icon" rel="shortcut icon" href="/images/favicon/favicon.ico">
  39.         <link type="image/png" sizes="16x16" rel="icon" href="/images/favicon/icons/favicon-16x16.png">
  40.         <link type="image/png" sizes="32x32" rel="icon" href="/images/favicon/icons/favicon-32x32.png">
  41.         <link type="image/png" sizes="96x96" rel="icon" href="/images/favicon/icons/favicon-96x96.png">
  42.         <link type="image/png" sizes="120x120" rel="icon" href="/images/favicon/icons/favicon-120x120.png">
  43.     {% endblock %}
  44.     <meta name="yandex-verification" content="239193428ba27fa2" />
  45.     <meta name="google-site-verification" content="33UhU8AvLA9eoT3WZfkzuOaxKNujSVAtcYZHf-pGToI" />
  46.     <link rel="manifest" href="/manifest.json?v=0">
  47.     <script>
  48.         // Заблокировать все трекеры до получения согласия
  49.         window['ga-disable-UA-185332166-1'] = true;
  50.         window['ga-disable-AW-978097094'] = true;
  51.         // Заглушки для трекеров
  52.         window.ga = window.ga || function() {
  53.             console.log('Google Analytics blocked - waiting for consent');
  54.             return {
  55.                 l: 1,
  56.                 q: [],
  57.                 push: function() { console.log('GA queue blocked'); }
  58.             };
  59.         };
  60.         window.gtag = window.gtag || function() {
  61.             console.log('Google Tag Manager blocked - waiting for consent');
  62.         };
  63.         window.fbq = window.fbq || function() {
  64.             console.log('Facebook Pixel blocked - waiting for consent');
  65.         };
  66.         window.ttq = window.ttq || function() {
  67.             console.log('TikTok Pixel blocked - waiting for consent');
  68.         };
  69.         window.ym = window.ym || function() {
  70.             console.log('Yandex Metrika blocked - waiting for consent');
  71.         };
  72.         // Блокируем dataLayer
  73.         window.dataLayer = window.dataLayer || [];
  74.         window.dataLayer.push = function() {
  75.             console.log('DataLayer blocked - waiting for consent:', arguments[0]);
  76.             return 0;
  77.         };
  78.     </script>
  79.     <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&apikey=ced3d85f-6a99-4208-93d6-b578ba5e8f8a"></script>
  80.     <script>
  81.         var userAgent = navigator.userAgent || navigator.vendor || window.opera;
  82.         if (userAgent.indexOf('FBAN') == -1 && userAgent.indexOf('FBAV') == -1 && userAgent.indexOf('Instagram') == -1 &&
  83.             userAgent.indexOf('Skype') == -1 && userAgent.indexOf('Viber') == -1 && userAgent.indexOf('WhatsApp') == -1) {
  84.             var d = document,
  85.                 h = d.getElementsByTagName('head')[0],
  86.                 s = d.createElement('script');
  87.             s.type = 'text/javascript';
  88.             s.async = true;
  89.             s.src = '//cdn.sendpulse.com/js/push/260be6a77276a4d176159328b4b7175c_1.js?v=0';
  90.             //s.src = '/js/sp.js?v=1';
  91.             h.appendChild(s);
  92.         }
  93.     </script>
  94.     <script data-noptimize="1" data-cfasync="false" data-wpfc-render="false">
  95.         (function () {
  96.             var script = document.createElement("script");
  97.             script.async = 1;
  98.             script.src = 'https://tpembars.com/NDgzMzU2.js?t=483356';
  99.             document.head.appendChild(script);
  100.         })();
  101.     </script>
  102.     {% set currentCity = getCurrentCity() %}
  103. </head>
  104. {% set bodyClass =  '' %}
  105. {% if noToken is not defined and is_granted('ROLE_ADMIN_USER') %}
  106.     {% set bodyClass =  ' a-u' %}
  107. {% endif %}
  108. <body class="{{ not isMobileDevice() ? 'desktop-device' }}{{ bodyClass }}">
  109. {% if app.debug %}
  110.     <input type="hidden" id="debugMode" value="1"/>
  111. {% endif %}
  112.     {% if app.user %}
  113.         <input type="hidden" id="customerID" value="{{ app.user.getID() }}"/>
  114.         <input class="sp_push_custom_data" type="hidden" name="Name" value="{{ app.user.getFirstName() }}">
  115.         {% if app.user.getEmail() != '' %}
  116.             <input class="sp_push_custom_data" type="hidden" name="email" value="{{ app.user.getEmail() }}">
  117.         {% else %}
  118.             <input class="sp_push_custom_data" type="hidden" name="email" value="{{ app.user.getPhone() }}">
  119.         {% endif %}
  120.     {% endif %}
  121.     <input type="hidden" id="serverTime" value="{{ 'now'|date('Y-m-d H:i:s') }}">
  122.     <input type="hidden" id="cityID" value="{{ currentCity.getID() }}">
  123.     {% set currentCity = getCurrentCity() %}
  124.     {% set coordinate = currentCity.getCoordinate() %}
  125.     <input id="cityName" type="hidden" value="{{ currentCity.getID() in [constant('Slivki\\Entity\\City::DEFAULT_CITY_ID'), constant('Slivki\\Entity\\City::TASHKENT_CITY_ID')] ? '/' : getURL(constant('Slivki\\Repository\\SeoRepository::RESOURCE_URL_CITY'), currentCity.getID()) }}"/>
  126.     <input type="hidden" id="cityCoord" value="[{{ coordinate.getLatitude() }}, {{ coordinate.getLongitude() }}]">
  127.     <input type="hidden" id="rtbhUID" value="{{ getRTBHouseUID(app.user) }}">
  128.     <input id="userId" type="hidden" value=" {{ app.user is not null ? app.user.ID : null }}">
  129.     <input id="metricaUrl" type="hidden" value=" {{ slivki_metrica_url }}/api/v1/metric">
  130.     {% block top %}{% endblock %}
  131.     {% block fullSiteBanner %}
  132.         {% if not isMobileDevice() and not (app.user and app.user.hasRole(constant('\\Slivki\\Entity\\UserGroup::ROLE_ADS_FREE'))) %}
  133.             {{ getBrandingBanner(app.user, brandingBannerCategoryIDs is defined ? brandingBannerCategoryIDs : [], offer is defined ? offer.getID()) }}
  134.         {% endif %}
  135.     {% endblock %}
  136.     {% block header %}
  137.         {% if isMobileDevice() %}
  138.             {% include 'header_mobile.html.twig' %}
  139.         {% else %}
  140.             {% include 'header.html.twig' %}
  141.         {% endif %}
  142.     {% endblock %}
  143. {% block messenger %}
  144.     {% include "Slivki#{regional_template_path}/jivosite/index.html.twig" %}
  145. {% endblock %}
  146.     {% block content %}
  147.         <div class="content container transparent with-banner {% block contentContainerClass %}{% endblock %}"  id="contentContainer">
  148.             {% block topContentBlock %}{% endblock %}
  149.             {% block mainHotFeedBlock %}{% endblock %}
  150.             {% if ('Googlebot' not in (app.request.server.get('HTTP_USER_AGENT'))) %}
  151.                 {% block left_sidebar %}{% endblock %}
  152.             {% endif %}
  153.             <div class="{% block mainColumnClass %}content--main {% endblock %}" {% block mainColumnParameters %}{% endblock %}>
  154.                 <div class="content-wrapper">
  155.                     {% block main_content %}{% endblock %}
  156.                 </div>
  157.             </div>
  158.             {% block bottomContentBlock %}{% endblock %}
  159.             </div>
  160.         </div>
  161.         {% block footer %}
  162.             {% if not disableFooter is defined  %}
  163.                 {{ getFooter() }}
  164.             {% endif %}
  165.         {% endblock %}
  166.         {% if not isMobileDevice() and not app.request.cookies.has('seenMicrophoneTooltip') and (not app.user or not app.user.isSeenMicrophoneTooltip()) %}
  167.             <div id="voiceSearchHintGreyout" class="hidden">
  168.                 <div id="voiceSearchHint" class="voice-search-hint-block">Круто! Нажмите на микрофон и скажите, например, суши или пицца</div>
  169.             </div>
  170.             {% if app.user %}
  171.                 {{ setSeenMicrophoneTooltip(app.user) }}
  172.             {% endif %}
  173.         {% endif %}
  174.         <div id="contentGreyout"></div>
  175.     {% endblock %}
  176.     {% block popups %}
  177.         {% if isMobileDevice() %}
  178.             <link rel="stylesheet" href="/css/infopopup_mobile.css?v={{ infopopup_css_version }}" type="text/css">
  179.         {% else %}
  180.             <link rel="stylesheet" href="/css/infopopup.css?v={{ infopopup_css_version }}" type="text/css">
  181.         {% endif %}
  182.         {% if app.session.flashbag.get("showMogilevMailingBonusPopup")|length > 0 %}
  183.             {% include 'Slivki/popups/mogilev_mailing_popup.html.twig' %}
  184.         {% endif %}
  185.         {% include 'Slivki/popups/info_dialog_popup.html.twig' with {id: 'info_dialog'} %}
  186.         {{ getNoticePopup(app.user) }}
  187.         {% include 'Slivki/popups/alert_popup.html.twig' %}
  188.         {% set infoDialogMessage = app.session.flashBag.get(constant('Slivki\\Controller\\SiteController::SHOW_INFO_DIALOG_PARAMETER')) %}
  189.         {% if infoDialogMessage | length > 0 %}
  190.             {% include 'Slivki/popups/info_dialog_popup.html.twig' with {'id': 'info_dialog_auto', 'infoDialogMessage': infoDialogMessage[0] } %}
  191.         {% endif %}
  192.         {% if app.user %}
  193.             {# user is logged in #}
  194.             {% if isMobileDevice() %}
  195.                 {% include 'Slivki/popups/mobile_logout.html.twig' with {id: 'logoutConfirmPopup'} %}
  196.             {% else %}
  197.                 {% include 'Slivki/popups/logout_popup.html.twig' with {id: 'logoutConfirmPopup'} %}
  198.             {% endif %}
  199.             {% if not isMobileDevice() %}
  200.                 {% include 'Slivki/popups/delete_comment_popup.html.twig' with {id: 'deleteCommentConfirmPopup'} %}
  201.                 {% if app.session.flashbag.get("openThanksForRegisterPopup") | length > 0 %}
  202.                     {% include 'Slivki/popups/thanks_for_register_popup.html.twig' with {id: 'modal-register-thanks'} %}
  203.                     <input type="hidden" id="openThanksForRegisterPopup"/>
  204.                 {% endif %}
  205.             {% endif %}
  206.         {% else %}
  207.             {% include 'Slivki/reset_password/popup_reset_pass.html.twig'%}
  208.             {% include 'Slivki/mobile/popup/succes_restore_password.html.twig'%}
  209.             {# user is not logged in #}
  210.             {% if not isMobileDevice() %}
  211.                 {% include 'Slivki/popups/login_register_popup.html.twig' %}
  212.                 {% include 'Slivki/popups/restore_password_popup.html.twig' with {id: 'modal_remember_password'} %}
  213.                 {% set registeredEmailSent = app.session.flashbag.get("registeredEmailSent") %}
  214.                 {% set registeredEmailSentRaw = app.session.flashbag.get("registeredEmailSentRaw") %}
  215.                 {% if registeredEmailSent | length > 0 and registeredEmailSentRaw | length > 0 %}
  216.                     {% include 'Slivki/popups/account_activation_popup.html.twig' with {id: 'modal-register-complete', link: registeredEmailSent[0], email: registeredEmailSentRaw[0]} %}
  217.                     <input type="hidden" id="openAccountActivationPopup"/>
  218.                 {% endif %}
  219.             {% endif %}
  220.         {% endif %}
  221.     {% endblock %}
  222.     {% include 'Slivki/delivery/modal/questions.html.twig' %}
  223.     {% include 'Slivki/delivery/modal/questionsSuccess.html.twig' %}
  224.     {% include 'Slivki/popups/slivki_confirm_popup.html.twig' %}
  225.     {% include 'Slivki/popups/new_alert_popup.html.twig' %}
  226.     {% include 'Slivki/popups/loading.html.twig' %}
  227.     {% include 'Slivki/popups/mail_popup.html.twig' %}
  228.     {% include 'Slivki/add_batch_codes/error.html.twig' %}
  229.     {% include 'Slivki/add_batch_codes/success.html.twig' %}
  230.     {% include 'Slivki/add_batch_codes/auth.html.twig' %}
  231.     {% include 'Slivki/popups/cookies_popup.html.twig' %}
  232. {% if app.user and not app.user.getEmail() and not app.request.get('_route') == 'profile' and app.session.flashbag.get("openMergeProfilePopup") %}
  233.     {% include 'Slivki/popups/popup_union_mail.html.twig' %}
  234. {% endif %}
  235.     <script src="/js/jquery2-2-4.min.js"></script>
  236.     {% block javascripts %}
  237.         <script type="text/javascript" src="/js/jquery.cookie.js"></script>
  238.         <script type="text/javascript" src="/js/cookies.min.js"></script>
  239.         <script src="/js/menuAim/main.min.js"></script>
  240.         <script src="/js/main.js?v=200"></script>
  241.         <script src="/js/voices/app.js?v=6"></script>
  242.         <script src="/js/voices/recorder.js"></script>
  243.         {% if isMobileDevice() %}
  244.         <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-touch-events/1.0.9/jquery.mobile-events.min.js"></script>
  245.         <script src="https://cdnjs.cloudflare.com/ajax/libs/fastclick/1.0.6/fastclick.min.js"></script>
  246.         <script src="/js/header_mobile.js?v=38/"></script>
  247.         {% endif %}
  248.         <script src="/js/jquery.form.js?v=1"></script>
  249.         <script type="text/javascript">var NREUMQ=NREUMQ||[];NREUMQ.push(["mark","firstbyte",new Date().getTime()]);</script>
  250.         <script src="/js/jquery.placeholder.js"></script>
  251.         <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/jquery-ui.min.js?v=1"></script>
  252.         <script type="text/javascript">
  253.             $.widget.bridge('uitooltip', $.ui.tooltip);
  254.             $.widget.bridge('uibutton', $.ui.button);
  255.         </script>
  256.         <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
  257.         <script src="/js/jquery.maskedinput.min.js"></script>
  258.         <script src="/js/jquery.inputmask.min.js"></script>
  259.         <script src="/js/ajaxupload.3.5.js?v=1"></script>
  260.         <script src="/js/lightbox.min.js?v=1"></script>
  261.         <script src="/js/jquery.marquee.min.js" type="text/javascript"></script>
  262.         <!--[if lt IE 9]>
  263.         <script src="/js/css3-mediaqueries.js?v=1"></script>
  264.         <script src="/js/html5shiv.js?v=1"></script>
  265.         <![endif]-->
  266.         <script type="text/javascript" src="/js/jquery.lazyload.js?v=2"></script>
  267.         <script src="/js/jquery.jcarousel.min.js?v=1"></script>
  268.         <script src="/js/mwheelIntent.js?v=1"></script>
  269.         <script src="/js/jquery.mousewheel.js?v=1"></script>
  270.         <script type="module" src="/js/botsrap-custom-dropdowns/custom-dropdowns.js"></script>
  271.         <div id="overlay-loading"><img src="/images/image-preview-ajax-loader.gif" alt="" /></div>
  272.         <noscript><div><img src="https://mc.yandex.ru/watch/20933521" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
  273.         <script src="/js/jform-styler/vanillaSelectBox.min.js"></script>
  274.         <script src="/js/intlTelInput-jquery.min.js"></script>
  275.         <script src="/js/slick.min.js"></script>
  276.         <script src="https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.13/js/utils.min.js"></script>
  277.         <link href="/css/scroll.css?v=5" rel="stylesheet" type="text/css" />
  278.         <script src="/js/jquery.jscrollpane.min.js?v=2"></script>
  279.         <script src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/5.5.9/lottie_light.min.js"></script>
  280.         <script src="/js/jquery.slivkiSmile.js?v=10"></script>
  281.         <script src="/js/recaptcha_api.js"></script>
  282.         <script src="/js/common.min.js?v={{ common_js_version }}"></script>
  283.         <script src="/js/common-old.min.js?v={{ common_old_js_version }}"></script>
  284.         <script type="module" src="/js/family_subscription/api_family_subscription.js?v={{ family_subscription_js_version }}"></script>
  285.         <script type="module" src="/js/family_subscription/family_subscription.js?v={{ family_subscription_js_version }}"></script>
  286.         <script src="/js/jquery.sameheight.js"></script>
  287.         <script src="/js/slivki_v1.js?v={{ slivki_v1_js_version }}"></script>
  288.         <script src="/js/subscription.js?v={{ subscription_js_version }}"></script>
  289.         <script src="//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
  290.         <script src="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js"></script>
  291.         <script type="module" src="/js/time_block_category/main.js?v={{ time_block_category_js }}"></script>
  292.         <script src="/js/moment.min.js"></script>
  293.         <script src="//translate.google.com/translate_a/element.js?cb=TranslateInit"></script>
  294.         <script src="/js/gtranslate.js"></script>
  295.         <script src="/js/flowersCategoryCarousel.js?v={{ flowers_category_carousel_js_version }}"></script>
  296.         <script src="/js/slider_preview/slider_preview.js?v={{ slider_preview_js_version }}"></script>
  297.         <script src="/js/helper.js?v={{ helper_version_js }}"></script>
  298.         <script src="/js/captcha/main.js?v=13"></script>
  299.         <script src="/js/maps_index_page/roundedControlls.js?v=5"></script>
  300.         <script type="module" src="/js/beauty/mainMapBeauty.js?v={{ main_map_beauty_js_version }}"></script>
  301.         <script type="module" src="/js/beauty/masters.js?v={{ beauty_masters_js_version }}"></script>
  302.         <script type="module" src="/js/oplati/main.js?v={{ oplati_js_version }}" />
  303.         <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-toast-plugin/1.3.2/jquery.toast.min.js"
  304.                 integrity="sha512-zlWWyZq71UMApAjih4WkaRpikgY9Bz1oXIW5G0fED4vk14JjGlQ1UmkGM392jEULP8jbNMiwLWdM8Z87Hu88Fw=="
  305.                 crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  306.         <!--[/ignore]-->
  307.     {% endblock %}
  308.     <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
  309.     <script type="text/javascript" src="//www.googleadservices.com/pagead/conversion.js">
  310.     </script>
  311.     <script src="/js/cookies/cookies.js?v={{ cookies_js_version }}"></script>
  312.     <noscript>
  313.         <div style="display:inline;">
  314.             <img height="1" width="1" style="border-style:none;" alt="" src="//googleads.g.doubleclick.net/pagead/viewthroughconversion/978097094/?guid=ON&amp;script=0"/>
  315.         </div>
  316.     </noscript>
  317.     {% set geoIpLocation = getIPLocationData() %}
  318.     <input type="hidden" id="geoIpLatitude" value="{{ geoIpLocation[0] }}"/>
  319.     <input type="hidden" id="geoIpLongitude" value="{{ geoIpLocation[1] }}"/>
  320.     {% if app.user and app.user.isGeoLocationAccepted() == null %}
  321.         <input type="hidden" id="storeGeoLocationData"/>
  322.     {% endif %}
  323.     {% block assetsBottom %}
  324.         <link href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/themes/smoothness/jquery-ui.css" rel="stylesheet" type="text/css" />
  325.         <link href="/css/lightbox.css" rel="stylesheet" type="text/css" />
  326.         <input id="slivkiSmileList" type="hidden" value="{{ constant('Slivki\\Entity\\Comment::SMILE_LIST')|join(',') }}"/>
  327.     {% endblock %}
  328.     {% block metrikaEvent %}{% endblock %}
  329. </body>
  330. </html>