templates/jpo/list.html.twig line 1

Open in your IDE?
  1. {% extends 'base.html.twig' %}
  2. {% block title %}{{ block('h1') }}{% endblock %}
  3. {% block description %}Retrouvez sur le site enseignement-prive.info les journées portes ouvertes des établissements de l'enseignement privé.{% endblock %}
  4. {% block body %}
  5. <section class="container page-jpo">
  6.     <div id="breadcrumb">
  7.         {% include 'jpo/_includes/breadcrumb.html.twig' with {
  8.             'lieu' : lieu,
  9.         }
  10.             only %}
  11.     </div>
  12.     <div class="title">
  13.       <div class="jpo-h1-like">Journées Portes Ouvertes</div>
  14.       <div class="triangle-defaut"></div>
  15.     </div>
  16.     {% if etablissement is not null %}
  17.         <div class="recherche-contexte text-left" role="group">
  18.             <a href="#" onclick="history.back()" class="liste ">
  19.                 Retour à la fiche
  20.             </a>
  21.         </div>
  22.     {% endif %}
  23.     <div class="wrap">
  24.         <section>
  25.             <h1 class="jpo-h2-like">
  26.             {%- block h1 -%}
  27.             {% if seoTitre %}
  28.             {{seoTitre | raw}}
  29.             {% else %}
  30.             Journées Portes Ouvertes
  31.             {% endif %}
  32.             {%- endblock -%}
  33.             </h1>
  34.             {% if seoTexte %}<span id="jpo-intro">{{seoTexte | raw}}</span><br/>{% endif %}
  35.             {% if etablissement is null %}
  36.             {{ render(controller(
  37.                 'App\\Controller\\JPOController::blocJPOsALaUne',
  38.                 { type:'liste' }
  39.             )) }}
  40.             {% endif %}
  41.             <div class="w-100 d-md-block d-lg-none pb-4">
  42.                 {% include 'actualite-etablissement/_includes/search-options.html.twig' with { type: 'mobile'} %}
  43.             </div>
  44.             <div class="jpo-list-tri">
  45.                 <div class="jpo-month">
  46.                     <ul>
  47.                     {% for jpo in jpos %}
  48.                         {% if loop.first %}
  49.                             {% set previous_jpo = jpo %}
  50.                         {% else %}
  51.                             {% set previous_jpo = jpos[loop.index0 - 1] %}
  52.                         {% endif %}
  53.                         {% if loop.last %}
  54.                             {% set next_jpo = jpo %}
  55.                         {% else %}
  56.                             {% set next_jpo = jpos[loop.index0 + 1] %}
  57.                         {% endif %}
  58.                         {% if jpo.date | date('m') != previous_jpo.date | date('m') or previous_jpo == jpo %}
  59.                             {% for month in 1..12 %}
  60.                                 {% if jpo.date | date('n') == month %}
  61.                                     <li style="height: 38px;"><a href="#{{ jpo.date | date('n') }}" class="scroll-month">{{jpo.date | format_date(pattern='MMMM Y') }}</a></li>
  62.                                 {% endif %}
  63.                             {% endfor %}
  64.                         {% endif %}
  65.                     {% endfor %}
  66.                     </ul>
  67.                 </div>
  68.                 {% for jpo in jpos %}
  69.                 {% if loop.first %}
  70.                     {% set previous_jpo = jpo %}
  71.                 {% else %}
  72.                     {% set previous_jpo = jpos[loop.index0 - 1] %}
  73.                 {% endif %}
  74.                 {% if loop.last %}
  75.                     {% set next_jpo = jpo %}
  76.                 {% else %}
  77.                     {% set next_jpo = jpos[loop.index0 + 1] %}
  78.                 {% endif %}
  79.               {% if jpo.date | date('m') != previous_jpo.date | date('m') or previous_jpo == jpo %} <div id="{{jpo.date | date('n')}}"> <h2>{{jpo.date | format_date('full') }}</h2><div>{% endif %}
  80.                 <article class="{% if jpo.etablissement.jpoPlus == 1 %}bckgrnd-plus {% endif %}jpo-item"
  81.                     data-etab-id="{{ jpo.etablissement.id }}" 
  82.                     data-etab-nom="{{ jpo.etablissement.denomination | e('html_attr') }}" 
  83.                     data-etab-segment="{{ jpo.etablissement.isClient ? 'client' : 'prospect' }}"
  84.                     data-etab-type="{{ typeEtablissementSimple(jpo.etablissement.type) | e('html_attr') }}"
  85.                     data-etab-ville="{{ jpo.etablissement.ville ? jpo.etablissement.ville.slug | replace({'-': '_'}) : null }}"
  86.                     data-etab-location-id="{{ jpo.etablissement and jpo.etablissement.ville ? jpo.etablissement.ville.departement.id ~ '-' ~ jpo.etablissement.codePostal ~ '-' ~ jpo.etablissement.ville.libelle : null }}"
  87.                     data-jpo-id="{{ jpo.id }}" 
  88.                     data-jpo-date="{{ jpo.date | date('Y-m') }}"
  89.                     data-jpo-date-full="{{ jpo.date | date('Y-m-d') }}"
  90.                     data-jpo-index="{{ loop.index }}"
  91.                     data-trace-action="{{ constant('App\\Entity\\Trace::JPO') | e('html_attr') }}" 
  92.                     data-trace-etab="{{ jpo.etablissement.id | e('html_attr') }}"
  93.                 >
  94.                     {% if jpo.etablissement.jpoPlus == 1 %}
  95.                         <span class="badge-plus-jpo"></span>
  96.                     {% endif %}
  97.                     <div class="icon"></div>
  98.                     <figure class="resize">
  99.                         {% if jpo.etablissement.logo is not empty %}
  100.                             {% set imgSrc = vich_uploader_asset(jpo.etablissement.logo, 'logoFile') %}
  101.                             {% if imgSrc %}
  102.                                 <img class="resp" src='{{ vich_uploader_asset(jpo.etablissement.logo, 'logoFile') | imagine_filter('etab_hp_logo') }}' alt='{{jpo.lieu}}' width='140' height='140'/>
  103.                             {% endif %}
  104.                         {% endif %}
  105.                     </figure>
  106.                     <div class="content">
  107.                         <p class="date">{{jpo.date | format_date(pattern='d MMMM Y') }}</p>
  108.                         {#<p class="city">{{jpo.lieu | u.truncate(30, '…', true)}}</p>#}
  109.                         <p class="city">{{ jpo.etablissement.ville|lieuLibelle }}</p>
  110.                         <p class="estab">{{ jpo.etablissement.denomination | u.truncate(50, '…', true)}}</p>
  111.                     </div>
  112.                     <a class="see-more" href="{{ path('jpo-etab', {'id': jpo.id}) }}" data-trace-action="{{ constant('App\\Entity\\Trace::JPO') | e('html_attr') }}" data-trace-etab="{{ jpo.etablissement.id | e('html_attr') }}">Découvrir</a>
  113.                 </article>
  114.               {% if jpo.date | date('m') != next_jpo.date | date('m') or next_jpo == jpo %} </div></div> {% endif %}
  115.                 {% endfor %}
  116.             </div>
  117.         </section>
  118.         <aside>
  119.             {% include 'actualite-etablissement/_includes/search-options.html.twig' with { type: 'aside'} %}
  120.         </aside>
  121.     </div>
  122. </section>
  123. {% endblock %}
  124. {% block data_layer %}
  125. <script>
  126. window.dataLayer = window.dataLayer || [];
  127. // 1. Contexte global de la page liste
  128. dataLayer.push({
  129.   event: "page_context",
  130.   page_type: "liste_jpo",
  131.   liste_type: "portes_ouvertes",
  132.   site_section: "portes_ouvertes",
  133.   education_niveau: {{ (niveaux ? niveaux | join('_') : null) | json_encode(constant('JSON_UNESCAPED_UNICODE')) | raw }},
  134.   region: {{ (lieu ? lieu.slug | replace({'-': '_'}) : null) | json_encode(constant('JSON_UNESCAPED_UNICODE')) | raw }},
  135.   departement: null,
  136.   ville: null,
  137.   code_postal: null,
  138.   recherche_type: "jpo",
  139.   total_resultats: {{ jpos is defined and jpos ? jpos|length : 0 }},
  140.   numero_pagination: {{ app.request.query.get('page', 1) }}
  141. });
  142. // 2. Événement métier : affichage d'une liste de journées portes ouvertes
  143. dataLayer.push({ ecommerce: null });
  144. {% set items = [] %}
  145. {% if jpos is defined and jpos|length %}
  146.     {% for jpo in jpos %}
  147.         {% set item = {
  148.             'item_id': jpo.id,
  149.             'item_name': 'JPO - ' ~ jpo.etablissement.denomination ~ ' - ' ~ jpo.date | format_date(pattern='d MMMM Y'),
  150.             'item_category': 'journee_portes_ouvertes',
  151.             'item_category2': typeEtablissementSimple(jpo.etablissement.type),
  152.             'item_category3': jpo.date | date('Y-m'),
  153.             'item_category4': jpo.etablissement.ville ? jpo.etablissement.ville.slug | replace({'-': '_'}) : null,
  154.             'location_id': jpo.etablissement and jpo.etablissement.ville ? jpo.etablissement.ville.departement.id ~ "-" ~ jpo.etablissement.codePostal ~ "-" ~ jpo.etablissement.ville.libelle : null,
  155.             'index': loop.index,
  156.             'jpo_date': jpo.date | date('Y-m-d'),
  157.             'etablissement_id': jpo.etablissement.id,
  158.             'etablissement_nom': jpo.etablissement.denomination,
  159.             'etablissement_segment': jpo.etablissement.isClient ? 'client' : 'prospect'
  160.         } %}
  161.         {% set items = items|merge([item]) %}
  162.     {% endfor %}
  163. {% endif %}
  164. dataLayer.push({
  165.   event: "view_item_list",
  166.   ecommerce: {
  167.     item_list_id: "jpo_toutes",
  168.     item_list_name: "Journées portes ouvertes",
  169.     items: {{ items|json_encode(constant('JSON_UNESCAPED_UNICODE'))|raw }}
  170.   }
  171. });
  172. document.addEventListener('click', function (event) {
  173.     const article = event.target.closest('article.jpo-item');
  174.     if (!article) {
  175.         return;
  176.     }
  177.     const item = {
  178.         item_id: article.dataset.jpoId,
  179.         item_name: 'JPO - ' + article.querySelector('.estab').textContent.trim() + ' - ' + article.querySelector('.date').textContent.trim(),
  180.         item_category: 'journee_portes_ouvertes',
  181.         etablissement_id: article.dataset.etabId,
  182.         etablissement_nom: article.dataset.etabNom,
  183.         etablissement_segment: article.dataset.etabSegment,
  184.         item_category2: article.dataset.etabType,
  185.         item_category3: article.dataset.jpoDate,
  186.         item_category4: article.dataset.etabVille,
  187.         location_id: article.dataset.etabLocationId,
  188.         index: article.dataset.jpoIndex,
  189.         jpo_date: article.dataset.jpoDateFull
  190.     };
  191.     dataLayer.push({ ecommerce: null });
  192.     dataLayer.push({
  193.         event: 'select_item',
  194.         ecommerce: {
  195.             item_list_id: 'jpo_toutes',
  196.             item_list_name: 'Journées portes ouvertes',
  197.             items: [item]
  198.         }
  199.     });
  200. });
  201. </script>
  202. {% endblock %}