templates/modules/app/base.html.twig line 1

Open in your IDE?
  1. <!doctype html>
  2. <html lang="{{ languages.locale }}">
  3. <head>
  4.     <meta charset="utf-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1">
  6.     <meta name="format-detection" content="telephone=no">
  7.     <meta http-equiv="X-UA-Compatible" content="IE=edge">
  8.     <meta name="language" content="{{ languages.locale }}">
  9.     {% if pages.active.isIndexable %}
  10.         {% set html_indexable = 'index, follow' %}
  11.     {% else %}
  12.         {% set html_indexable = 'noindex, follow' %}
  13.     {% endif %}
  14.     <meta name="robots" content="{{ html_indexable }}">
  15.     <link rel="canonical" href="{{ uri.full }}">
  16.     {# {% for lang_code, lang_uri in uri.alternate %} #}
  17.     {# <link rel="alternate" href="{{ website.domain ~ '/' ~ lang_uri }}" hreflang="{{ lang_code }}"/> #}
  18.     {# {% endfor %} #}
  19.     <title>{% block page_title %}{{ seo.title }}{% endblock %}</title>
  20.     <meta name="description" content="{% block page_description %}{{ seo.description }}{% endblock %}"/>
  21.     <meta name="keywords" content="{% block page_keywords %}{{ seo.keywords }}{% endblock %}">
  22.     {# SOCIAL NETWORKS - TWITTER #}
  23.     <meta name="twitter:site" content="{{ website.name }}">
  24.     <meta name="twitter:title" content="{% block twitter_title %}{{ sn.title }}{% endblock %}">
  25.     <meta name="twitter:description" content="{% block twitter_description %}{{ sn.description }}{% endblock %}">
  26.     <meta name="twitter:url" content="{{ uri.full }}"/>
  27.     <meta name="twitter:domain" content="{{ website.domain }}"/>
  28.     <meta name="twitter:image:src"
  29.           content="{% block twitter_image %}{{ uri.protocol ~ uri.host ~ '/assets/media/images/uploads/' ~ sn.image_social_networks }}{% endblock %}">
  30.     {# SOCIAL NETWORKS #}
  31.     <meta property="og:title" content="{% block facebook_title %}{{ sn.title }}{% endblock %}">
  32.     <meta property="og:description" content="{% block facebook_description %}{{ sn.description }}{% endblock %}">
  33.     <meta property="og:url" content="{{ uri.full }}">
  34.     <meta property="og:language" content="{{ languages.locale }}">
  35.     <meta property="og:image"
  36.           content="{% block facebook_image %}{{ uri.protocol ~ uri.host ~ '/assets/media/images/uploads/' ~ sn.image_social_networks }}{% endblock %}"/>
  37.     <meta property="og:type" content="website">
  38.     {# FAVICON #}
  39.     <link rel="apple-touch-icon" sizes="57x57" href="{{ asset('assets/favicon/apple-icon-57x57.png') }}">
  40.     <link rel="apple-touch-icon" sizes="60x60" href="{{ asset('assets/favicon/apple-icon-60x60.png') }}">
  41.     <link rel="apple-touch-icon" sizes="72x72" href="{{ asset('assets/favicon/apple-icon-72x72.png') }}">
  42.     <link rel="apple-touch-icon" sizes="76x76" href="{{ asset('assets/favicon/apple-icon-76x76.png') }}">
  43.     <link rel="apple-touch-icon" sizes="114x114" href="{{ asset('assets/favicon/apple-icon-114x114.png') }}">
  44.     <link rel="apple-touch-icon" sizes="120x120" href="{{ asset('assets/favicon/apple-icon-120x120.png') }}">
  45.     <link rel="apple-touch-icon" sizes="144x144" href="{{ asset('assets/favicon/apple-icon-144x144.png') }}">
  46.     <link rel="apple-touch-icon" sizes="152x152" href="{{ asset('assets/favicon/apple-icon-152x152.png') }}">
  47.     <link rel="apple-touch-icon" sizes="180x180" href="{{ asset('assets/favicon/apple-icon-180x180.png') }}">
  48.     <link rel="icon" type="image/png" sizes="192x192" href="{{ asset('assets/favicon/android-icon-192x192.png') }}">
  49.     <link rel="icon" type="image/png" sizes="32x32" href="{{ asset('assets/favicon/favicon-32x32.png') }}">
  50.     <link rel="icon" type="image/png" sizes="96x96" href="{{ asset('assets/favicon/favicon-96x96.png') }}">
  51.     <link rel="icon" type="image/png" sizes="16x16" href="{{ asset('assets/favicon/favicon-16x16.png') }}">
  52.     <link rel="manifest" href="{{ asset('manifest.json') }}">
  53.     {# STYLESHEETS #}
  54.     {% set google_fonts = "https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,600;0,700;1,400" %}
  55.     <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
  56.     <link rel="preload" as="style" href="{{ google_fonts }}&display=swap" />
  57.     <link rel="stylesheet" href="{{google_fonts}}&display=swap" media="print" onload="this.media='all'" />
  58.     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css"/>
  59.     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.carousel.min.css"/>
  60.     {{ encore_entry_link_tags('app_base') }}
  61.     {# GOOGLE FONTS #}
  62.     {% block stylesheets %}{% endblock %}
  63.     <script src="{{ asset('assets/vendor/tarteaucitron-1.2/tarteaucitron.js') }}"></script>
  64.     <script>
  65.         let base_variables = {
  66.             'cookies': {
  67.                 'privacy_url': "{{ pages.notice.uri|default('/') }}",
  68.                 'read_more_url': "{{ pages.notice.uri|default('/') }}",
  69.                 'google_analytics': "{{ configuration.googleAnalytics }}",
  70.                 'addThis': "{{ configuration.addThis }}",
  71.                 'pixel_facebook': "{{ configuration.pixelFacebook }}",
  72.                 'recaptcha': "{{ configuration.reCaptchaClient }}",
  73.             },
  74.             'popin': {
  75.                 'use_popin': "{{ pages.list.general.usePopin }}",
  76.                 'use_cookie_popin': "{{ pages.list.general.useCookiePopin }}",
  77.                 'popin_cookie_name': "{{ pages.list.general.popinCookieName }}",
  78.             },
  79.             'url': {
  80.                 'newsletter': "{{ path('app_ajax_newsletters') }}"
  81.                 {#    'search_autocomplete': "{{ path('app_ajax_search_autocomplete') }}",#}
  82.                 {#    'search': "{{ pages.list.page_default_5fbd44708c3a3.translate(languages.locale).uri|path(languages) }}"#}
  83.             }
  84.         };
  85.         let user_variables = {
  86.             'uri': {
  87.                 'login': "{{ path('user_connect') }}",
  88.                 'register': "{{ path('user_register') }}",
  89.                 'register_notification': "{{ path('user_register_notification') }}",
  90.                 'admin': "/4DM1n157R4710N",
  91.             }
  92.         };
  93.         let shop_variables = {
  94.             'url': {
  95.                 'product_favourite_actions': '',
  96.                 'product_favoris_add': "{{ path('shopping_product_favoris_add') }}",
  97.                 'product_favoris_remove': "{{ path('shopping_product_favoris_remove') }}",
  98.                 'cart_product_add': "{{ path('shopping_cart_product_add') }}",
  99.                 'cart_product_update': "{{ path('shopping_cart_product_update') }}",
  100.                 'cart_product_remove': "{{ path('shopping_cart_product_remove') }}"
  101.             },
  102.             'messages': {
  103.                 'cart_button_update': "Mettre à jour",
  104.                 'cart_button_remove': "x",
  105.                 'cart_button_error_stock': "Stock insuffisant",
  106.                 'cart_button_error_fire': "Une erreur est survenue",
  107.             }
  108.         };
  109.     </script>
  110.     {# Facebook Pixel Code #}
  111.     <script>
  112.         !function(f,b,e,v,n,t,s)
  113.         {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
  114.             n.callMethod.apply(n,arguments):n.queue.push(arguments)};
  115.             if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
  116.             n.queue=[];t=b.createElement(e);t.async=!0;
  117.             t.src=v;s=b.getElementsByTagName(e)[0];
  118.             s.parentNode.insertBefore(t,s)}(window, document,'script',
  119.             'https://connect.facebook.net/en_US/fbevents.js');
  120.         fbq('init', '324766674855803');
  121.         fbq('track', 'PageView');
  122.     </script>
  123.     <noscript>
  124.         <img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=324766674855803&ev=PageView&noscript=1" />
  125.     </noscript>
  126.     {# TARTEAUCITRON #}
  127.     <script>
  128.         /**
  129.          * Gestion des cookies
  130.          */
  131.         tarteaucitron.init({
  132.             "privacyUrl": base_variables['cookies']['privacy_url'],
  133.             "hashtag": "#tarteaucitron",
  134.             "cookieName": "tarteaucitron",
  135.             "orientation": "bottom",
  136.             "showAlertSmall": false,
  137.             "cookieslist": true,
  138.             "adblocker": false,
  139.             "AcceptAllCta": true,
  140.             "highPrivacy": true,
  141.             "handleBrowserDNTRequest": false,
  142.             "removeCredit": true,
  143.             "moreInfoLink": true,
  144.             "useExternalCss": false,
  145.             "readmoreLink": base_variables['cookies']['read_more_url']
  146.         });
  147.         /**
  148.          * Gestions des cookies - Options
  149.          */
  150.         if (base_variables['cookies']['google_analytics'] != '') {
  151.             tarteaucitron.user.gtagUa = base_variables['cookies']['google_analytics'];
  152.             tarteaucitron.user.gtagMore = function () {
  153.             };
  154.             (tarteaucitron.job = tarteaucitron.job || []).push('gtag');
  155.         }
  156.         if (base_variables['cookies']['addThis'] != '') {
  157.             tarteaucitron.user.addthisPubId = base_variables['cookies']['addThis'];
  158.             (tarteaucitron.job = tarteaucitron.job || []).push('addthis');
  159.         }
  160.         if (base_variables['cookies']['pixel_facebook'] != '') {
  161.             tarteaucitron.user.facebookpixelId = base_variables['cookies']['pixel_facebook'];
  162.             tarteaucitron.user.facebookpixelMore = function () {
  163.             };
  164.             (tarteaucitron.job = tarteaucitron.job || []).push('facebookpixel');
  165.         }
  166.         if (base_variables['cookies']['recaptcha'] != '') {
  167.             (tarteaucitron.job = tarteaucitron.job || []).push('recaptcha');
  168.         }
  169.     </script>
  170. </head>
  171. <body>
  172. {% include '@app/includes/page_loader.html.twig' %}
  173. {% block content %}{% endblock %}
  174. <div id="modal-association-list"></div>
  175. {% if pages.list.general.usePopin == 1 %}
  176.     <div id="modal-cancel" class="modal modal-cancel-wrapper">
  177.         <div class="modal-cancel">
  178.             <div class="modal-container">
  179.                 <div class="modal-content">
  180.                     <button id="modal-close" class="modal-close" aria-label="Fermer">
  181.                         <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true"
  182.                              focusable="false" data-prefix="fas"
  183.                              data-icon="times" class="svg-inline--fa fa-times fa-w-11" role="img" viewBox="0 0 352 512">
  184.                             <path fill="currentColor"
  185.                                   d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"/>
  186.                         </svg>
  187.                     </button> {# /.modal-close #}
  188.                     {% if  pages.list.general.usePopinRedirect == 1 %}<a
  189.                             href="{{ pages.list.general.popinRedirect }}">{% endif %}
  190.                         <img src="{{ asset('assets/media/images/uploads/' ~  pages.list.general.popin|striptags) }}"
  191.                              alt="{{ pages.list.general.popinAlt|striptags }}">
  192.                         {% if  pages.list.general.usePopinRedirect == 1 %}</a>{% endif %}
  193.                 </div> {# /.modal-content #}
  194.             </div> {# /.modal-container #}
  195.         </div> {# /.modal-cancel #}
  196.     </div> {# /.modal #}
  197. {% endif %}
  198. <div id="modal-appli" class="modal modal-appli">
  199.     <div class="modal-container">
  200.         <div class="modal-header">
  201.             <p class="modal-title">Téléchargez notre application</p>
  202.             <button class="btn-appli btn-cancel">
  203.                 <i class="fas fa-times"></i>
  204.             </button>
  205.         </div>
  206.         <div class="modal-content">
  207.             <a href="https://play.google.com/store/apps/details?id=fr.inithy.sanoa&gl=FR" class="btn" rel="noopener" target="_blank">
  208.                 <img src="{{ asset('assets/media/images/core/google.png') }}" alt="Disponible sur Google play">
  209.             </a>
  210.             <a href="https://apps.apple.com/fr/app/sanoa/id1542362480" class="btn" rel="noopener" target="_blank">
  211.                 <img src="{{ asset('assets/media/images/core/ios.png') }}" alt="Disponible sur App Store">
  212.             </a>
  213.         </div>
  214.     </div>
  215. </div>
  216. {# JAVASCRIPTS #}
  217. <script src="{{ asset('assets/vendor/jquery-3.5.1/js/jquery.min.js') }}"></script>
  218. <script src="{{ asset('assets/vendor/popper-1.12.9/js/popper.min.js') }}"></script>
  219. <script src="{{ asset('assets/vendor/bootstrap-4.5.2/js/bootstrap.min.js') }}"></script>
  220. {# <script src="{{ asset('assets/vendor/jquery-ui-1.12.1/js/jquery-ui.min.js') }}"></script> #}
  221. {# <script src="{{ asset('assets/vendor/jquery-selectric-1.13.0/js/selectric.min.js') }}"></script> #}
  222. {# <script src="{{ asset('assets/vendor/select2-4.0.5/js/select2.min.js') }}"></script> #}
  223. <script src="{{ asset('assets/vendor/jquery-validate-1.19.0/js/validate.min.js') }}"></script>
  224. <script src="{{ asset('assets/vendor/jquery-validate-1.19.0/js/additional-methods.min.js') }}"></script>
  225. <script src="{{ asset('assets/vendor/jquery-validate-1.19.0/js/localization/messages_fr.min.js') }}"></script>
  226. <script src="{{ asset('assets/vendor/aos-3.0.0/js/aos.min.js') }}"></script>
  227. {# <script src="{{ asset('assets/vendor/bootstrap-tagsinput/js/bootstrap-tagsinput.min.js') }}"></script> #}
  228. <script src="{{ asset('assets/vendor/lightslider-1.1.6/js/lightslider.min.js') }}"></script>
  229. {# <script src="{{ asset('assets/vendor/slick-1.8.1/js/slick.min.js') }}"></script> #}
  230. {# <script src="{{ asset('assets/vendor/lightslider-1.1.6/js/lightslider.min.js') }}"></script> #}
  231. <script src="{{ asset('assets/vendor/skrollr/js/skrollr.min.js') }}"></script>
  232. <script src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.min.js"></script>
  233. <script type="application/ld+json">
  234.         {
  235.             "@context" : "http://schema.org",
  236.             "@type" : "LocalBusiness",
  237.               {% if configuration.organizationLogo != '' %}"image" : "{{ uri.protocol ~ uri.host ~ '/assets/media/images/uploads/' ~ configuration.organizationLogo }}",{% endif %}
  238.               {% if configuration.organizationName != '' %}"name" : "{{ configuration.organizationName }}",{% endif %}
  239.               {% if configuration.organizationDescription|striptags != '' %}"description" : "{{ configuration.organizationDescription|striptags }}",{% endif %}
  240.               {% if configuration.organizationUrl  != '' %}"url" : "{{ configuration.organizationUrl }}",{% endif %}
  241.               {% if configuration.organizationPriceRange  != '' %}"priceRange" : "{{ configuration.organizationPriceRange }}",{% endif %}
  242.               {% if configuration.organizationEmail != '' %}"email": "{{ configuration.organizationEmail }}",{% endif %}
  243.               {% if configuration.organizationFax != '' %}"faxNumber": "{{ configuration.organizationFax }}",{% endif %}
  244.               {% if configuration.organizationPhone != '' %}"telephone": "{{ configuration.organizationPhone }}",{% endif %}
  245.               "openingHours": [
  246.               "{{ configuration.organizationOpenHours1 }}",
  247.               "{{ configuration.organizationOpenHours2 }}",
  248.               "{{ configuration.organizationOpenHours3 }}",
  249.               "{{ configuration.organizationOpenHours4 }}",
  250.               "{{ configuration.organizationOpenHours5 }}",
  251.               "{{ configuration.organizationOpenHours6 }}",
  252.               "{{ configuration.organizationOpenHours7 }}"
  253.             ],
  254.             "address": {
  255.             "@type": "PostalAddress",
  256.             {% if configuration.organizationAddressCity != '' %}"addressLocality": "{{ configuration.organizationAddressCity }}",{% endif %}
  257.             {% if configuration.organizationAddressPostcode != '' %}"postalCode": "{{ configuration.organizationAddressPostcode }}",{% endif %}
  258.             {% if configuration.organizationAddressStreet != '' %}"streetAddress": "{{ configuration.organizationAddressStreet }}"{% endif %}
  259.             },
  260.             "sameAs" :
  261.               [
  262.                 {% if configuration.snFacebook != '' %}"{{ configuration.snFacebook|striptags }}"{% if configuration.snTwitter != ''  or configuration.snInstagram != ''  or configuration.snYoutube != '' %},{% endif %}{% endif %}
  263.                 {% if configuration.snTwitter != '' %}"{{ configuration.snTwitter|striptags }}"{% if configuration.snInstagram != ''  or configuration.snYoutube != '' %},{% endif %}{% endif %}
  264.                 {% if configuration.snInstagram != '' %}"{{ configuration.snInstagram|striptags }}"{% if configuration.snYoutube != '' %},{% endif %}{% endif %}
  265.                 {% if configuration.snYoutube != '' %}"{{ configuration.snYoutube|striptags }}"{% endif %}
  266.               ]
  267.         }
  268. </script>
  269. {{ encore_entry_script_tags('app_base') }}
  270. {{ encore_entry_script_tags('user_base') }}
  271. {{ encore_entry_script_tags('shop_base') }}
  272. {% block javascripts %}{% endblock %}
  273. </body>
  274. </html>