{% extends 'base.html.twig' %}
{% block head %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "School",
"name": "{{ etablissement.denomination }}",
"address": {
"@type": "PostalAddress",
"streetAddress":"{{ etablissement.adresse2 }}",
"addressLocality": "{{etablissement.ville.departement.libelle}}",
"addressRegion": "{{ etablissement.region.id }}",
"postalCode": "{{ etablissement.codePostal }}",
"addressCountry": "{{ etablissement.region.pays.id }}"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "{{ etablissement.latitude }}",
"longitude": "{{ etablissement.longitude }}"
},
"url": "{{ etablissement.url }}",
"telephone": "{{ etablissement.telephonePrincipal }}",
"email" : "{{ etablissement.emailPrincipal }}"
}
</script>
{% endblock %}
{% block stylesheets %}
{% if etablissement.autoriseTelephonePayant %}
<link rel="preload" href="https://wshiconnect.mediakiosque.com/hiconnectjs/css/style-1.0.2.css" as="style" onload="this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="https://wshiconnect.mediakiosque.com/hiconnectjs/css/style-1.0.2.css"></noscript>
<style>
.showNumberBtn .btn.green {
background: #fff !important;
all: unset;
}
</style>
{% endif %}
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" crossorigin=""/>
{# Btn Sticky sur mobile #}
<style>
</style>
{% endblock %}
{# ----- javascripts -------------------------------------------------------- #}
{% block javascripts %}
{% if etablissement.autoriseTelephonePayant %}
<script type="text/javascript" src="https://wshiconnect.mediakiosque.com/hiconnectjs/js/hmd_hiconnect-2.0.0-{{ hiConnectJskey }}.js?jquery=no" defer></script>
<script>
var hiConnectInterval = setInterval(function() {
if (typeof(jQuery) !== 'undefined' && typeof($.fn.hmdHiconnect) !== 'undefined') {
clearInterval(hiConnectInterval);
$(document).ready(function($) {
$('.hmd_hiconnect').hmdHiconnect();
});
}
}, 100);
</script>
{% endif %}
<script>
// Character counter
var textarea = document.querySelector("textarea");
var maxlength = textarea.getAttribute("maxlength");
document.getElementById('textarea_feedback').innerHTML = maxlength + " caractères restants";
textarea.addEventListener("input", function(){
var maxlength = this.getAttribute("maxlength");
var currentLength = this.value.length;
if( currentLength > maxlength ){
message = "Pas plus de " + maxlength + " caractères SVP.";
return;
}else{
message = maxlength - currentLength + " caractères restants";
}
document.getElementById('textarea_feedback').innerHTML = message;
});
</script>
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js" crossorigin=""></script>
<script>
// Map affichée directement dans la fiche
{% if not etablissement.isClient %}
const mapzero = L.map('mapzero', {
zoomControl: false,
dragging: false,
scrollWheelZoom: false,
doubleClickZoom: false,
boxZoom: false,
keyboard: false,
tap: false,
touchZoom: false,
}).setView([{{etablissement.latitude}}, {{etablissement.longitude}}], 15);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '',
interactive: false
}).addTo(mapzero);
L.marker([{{etablissement.latitude}}, {{etablissement.longitude}}], {interactive: false}).addTo(mapzero);
{% else %}
const mapzero = L.map('mapzero').setView([{{etablissement.latitude}}, {{etablissement.longitude}}], 15);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: ''
}).addTo(mapzero);
L.marker([{{etablissement.latitude}}, {{etablissement.longitude}}]).addTo(mapzero);
{% endif %}
</script>
<script>
{# Afficher le bouton "Contacter l'étab" au scroll sur la fiche établissement après 20% de scroll #}
(function () {
const btn = document.querySelector('.container.page-fiche .contact-btn-like');
if (!btn) return;
window.addEventListener('scroll', () => {
const scrolled = window.scrollY;
const docHeight = document.documentElement.scrollHeight - window.innerHeight;
const percent = (scrolled / docHeight) * 100;
btn.classList.toggle('is-visible', percent >= 10); // Pourcentage de scroll avant d'afficher le bouton
}, { passive: true });
})();
{# Cacher le btn quand le form est visible #}
(function() {
const el = document.getElementById('di-inline-mobile'); // ton élément
if (!el) {
console.log('Élément introuvable !');
return;
}
const observer = new IntersectionObserver(
([entry]) => {
const btn = document.querySelector('.container.page-fiche .contact-btn-like');
if (entry.isIntersecting) {
// console.log('Élément VISIBLE à l’écran');
btn.classList.add('d-none');
} else {
// console.log('Élément NON visible à l’écran');
btn.classList.remove('d-none');
}
},
{
threshold: 0.2 // déclenche dès que 20% de l’élément est visible
}
);
observer.observe(el);
})();
{# déplacer la carte après le formulaire, en version mobile #}
{#
document.addEventListener('DOMContentLoaded', function() {
const staticMap = document.getElementById('static-map');
const diInline = document.getElementById('di-inline-mobile');
function moveMap() {
if (window.innerWidth <= 767 && staticMap && diInline) {
// Vérifie si la map n'est pas déjà déplacée
if (!diInline.nextElementSibling || diInline.nextElementSibling.id !== 'static-map') {
diInline.insertAdjacentElement('afterend', staticMap);
}
}
}
moveMap();
window.addEventListener('resize', moveMap);
});
#}
</script>
{% endblock %}
{# ----- title, description et autres metadatas ----------------------------- #}
{% set type = "" %}
{% if etablissement.typeClient == 'internat' %}
{% set type = "internat" %}
{% elseif etablissement.typeClient == 'organisme' %}
{% set type = "organisme" %}
{% elseif etablissement.typeClient == 'fournisseur' %}
{% set type = "fournisseur" %}
{% endif %}
{%- block etabLieu -%}
{%- autoescape false -%}
{{ etablissement.denomination }} - {{ etablissement.codePostal }}
{%- if etablissement.ville %}
{%- if etablissement.ville.libelle %} {{ etablissement.ville.libelle -}}{%- endif -%}
{%- if etablissement.ville.departement and etablissement.ville.departement.libelle -%}
- {{ etablissement.ville.departement.id }} {{ etablissement.ville.departement.libelle -}}
{%- endif -%}
{%- endif -%}
{%- endautoescape -%}
{%- endblock -%}
{% block title -%}
{%- autoescape false -%}
{{- block('etabLieu') -}}
{{- etablissement.categoriePrimaire ? ' - ' ~ etablissement.categoriePrimaire.libelle -}}
{%- endautoescape -%}
{%- endblock %}
{% block description -%}
{%- autoescape false -%}
{{- block('etabLieu') }} {{ etablissement.motsCles -}}
{# {{- (etablissement.compileTexteReferencement | default(etablissement.motsCles)) | striptags | u.truncate(160, '...', false) -}} #}
{%- endautoescape -%}
{%- endblock %}
{% set siteLdJson = siteLdJson | merge(['etablissement']) %}
{# ----- contenu ------------------------------------------------------------ #}
{% block body %}
{% set imgAlt = [
etablissement.codePostal,
(etablissement.ville ? etablissement.ville.libelle : ''),
etablissement.denomination,
]|join(' - ')|trim(' -') %}
<section class="container page-fiche {{ type ? type : typeOnglet(etablissement.type) }} ">
{# ----- Breadcrumb ----------------------------------------------------- #}
<div id="breadcrumb">
{% include '_includes/breadcrumb-etablissement.html.twig' with {
'etablissement': etablissement,
} only %}
</div>
<div>
<header>
{# <div class="col-12 col-lg-6 d-left"> #}
<div class="col">
{# Logo + Dénomination #}
<div class="container description-new mt-3 mb-3">
<div class="row align-items-center">
<div class="col-lg-2 col-md-2" style="">
<div class="row g-0">
<div class="col">
<figure class="fiche-logo">
{% if etablissement.isClient and etablissement.logo %}
<img src="{{ vich_uploader_asset(etablissement.logo, 'logoFile') | imagine_filter('etab_fiche_logo') }}" alt="{{ imgAlt }}" title="{{ imgAlt }}">
{% set figure = vich_uploader_asset(etablissement.logo, 'logoFile') | imagine_filter('etab_fiche_logo') %}
{% else %}
<span class="no-logo"></span>
{% endif %}
</figure>
</div>
<div class="col-auto d-md-none text-end">
{# Bouton de contact #}
<div class="text-center contact-btn-like-top" onclick="document.getElementById('di-inline').scrollIntoView({ behavior: 'smooth' });">
<div id="top-level1">Besoin d'informations ?</div>
<div id="top-level2">Contactez l'établissement</div>
</div>
</div>
</div>
</div>
<div class="col-lg-10 col-md-10 col-sm-12">
<h1 class="denomination">{{ etablissement.denomination }}</h1>
{% if type != 'fournisseur' and type != 'organisme' %}
<div class="denomination-footer">
{% if etablissement.catholique %}Enseignement catholique{% endif %}
{% if etablissement.sousContrat %}<span class="badge-sous-contrat">Sous contrat</span>{% endif %}
</div>
{% endif %}
</div>
</div>
</div>
{# image étab + coords + btn "contact" + map #}
<div class="container contact">
<div class="row contact-bloc ">
<div class="col-lg-4">
{# ----- Diaporama/photo ---------------------------------------------- #}
{% include 'fiche/_includes/diaporama.html.twig' with {
'etablissement': etablissement,
} only %}
</div>
<div class="col-lg-4 mt-4 mt-lg-0">
{# ----- Quelques chiffres ------------------------------------------ #}
{% if etablissement.chiffres is not empty and etablissement.chiffres != "0" %}
<div class="titre-haut-1">Quelques chiffres</div>
<ul class="list-unstyled liste-chiffres">
{{ en_quelques_chiffres(etablissement.chiffres) | raw }}
</ul>
{% elseif etablissement.getData is not empty and etablissement.chiffres != "0" %}
<div class="titre-haut-1">Quelques chiffres</div>
<ul class="list-unstyled liste-chiffres">
{% for item in etablissement.getData %}
<li>{{item.label}}: <b>{{item.value}}{{item.suffix}}</b> </li>
{% endfor %}
</ul>
{% endif %}
{# ----- Adresse/Coordonnées (bloc "Localisation" )---------------------- #}
<div class="coords">
{% include 'fiche/_includes/address.html.twig' with {
'etablissement': etablissement,
} only %}
</div>
{% if etablissement.isClient %}
{# ----- JPO, actualité, offre d'emploi -- #}
{% include 'fiche/_includes/infos.html.twig' %}
{% endif %}
{% if etablissement.isClient or etablissement.typeClient in ['organisme', 'fournisseur'] %}
{# Bouton de contact #}
<div class="contact-btn-like text-center" onclick="document.getElementById('di-inline').scrollIntoView({ behavior: 'smooth' });">
<div id="level1">Besoin d'informations ?</div>
<div id="level2">Contactez l'établissement</div>
</div>
{% endif %}
{% include 'fiche/_includes/telephone-payant.html.twig' with {'etablissement': etablissement} only %}
</div>
<div class="col-lg-4 carte mt-4 mt-lg-0">
{# ----- Carte ---------------------------------------------- #}
{% if etablissement.latitude is not empty and etablissement.longitude is not empty %}
<div id="static-map" style="min-height: 260px; height: 100%;" class="d-none d-lg-block">
<div id="mapzero" style="width: 100%; height: 100%;">La carte de l'établissement...</div>
<div class="itineraire-map">
<a href="{{"https://www.google.com/maps/dir/?api=1&destination="~ etablissement.latitude ~"%2C"~ etablissement.longitude ~"&dir_action=navigate"}}" class="itineraire" target="_blank" rel="noopener">
Itinéraire
</a>
</div>
<span class="map_marker"></span>
</div>
{% endif %}
</div>
</div>
</div>
</div>
<div class="d-block d-lg-none d-xl-none mb-4">
{% if etablissement.isClient %}
{# ----- Diplômes -- #}
{% include 'fiche/_includes/diplomes.html.twig' %}
{% endif %}
</div>
<div class="d-none d-lg-block d-xl-block w-100">
{% if etablissement.isClient %}
{# ----- Diplômes -- #}
{% include 'fiche/_includes/diplomes.html.twig' %}
{% endif %}
</div>
</header>
</div>
<div class="wrap mt-4">
<section class="content">
<article>
{% if etablissement.isClient or etablissement.typeClient in ['organisme', 'fournisseur'] %}
{# ----- Insertion -------------------------------------- #}
{% include 'fiche/_includes/insertion.html.twig' %}
<span id="di-inline-mobile"></span>
{# ----- Contacter établissement (bas de la fiche) ---------------- #}
<div class="fiche-coords d-none d-lg-flex">
{% if type == 'fournisseur' %}
<div class="form">
{% include '_includes/lien-masque.html.twig' with {
'target': path('form-di', {id : etablissement.id}),
'content': 'Contacter le fournisseur',
} only %}
</div>
{% elseif type == 'organisme' %}
<div class="form">
{% include '_includes/lien-masque.html.twig' with {
'target': path('form-di', {id : etablissement.id}),
'content': 'Contacter l\'organisme',
} only %}
</div>
{% else %} {# établissement ou internat #}
{% include 'fiche/_includes/static-slider.html.twig' %}
{% endif %}
</div>
{% else %}
{# ----- Options pour non-participant ------------------- #}
{% include 'fiche/_includes/options-non-participant.html.twig' %}
{% endif %}
</article>
{# ----- Recommandations ---------------------------------------- #}
{% if not etablissement.isClient and etablissement.typeClient in ['établissement', 'internat'] %}
{% include 'fiche/_includes/etablissements-proches-prospect.html.twig' with {
'etablissement': etablissement,
'etablissementsProches': etablissementsProches,
} only %}
{% endif %}
{% if etablissement.typeClient in ['établissement', 'internat'] %}
{% include 'fiche/_includes/etablissements-du-meme-groupe.html.twig' %}
{% endif %}
{# ----- Informations de contact ---------------------------------------- #}
<div class="fiche-module informations-contact">
<h2 id="informations-contact">Autres contacts établissement</h2>
<ul class="list-unstyled card-two-columns-old">
<li>
{% include 'fiche/_includes/telephone.html.twig' with {
'etablissement': etablissement,
} only %}
</li>
{% if etablissement.isClient %}
<li class="website">
{% include 'fiche/_includes/siteweb.html.twig' with {
'etablissement': etablissement,
} only %}
</li>
<li class="facebook">
{% include 'fiche/_includes/facebook.html.twig' with {
'etablissement': etablissement,
} only %}
{% endif %}
</li>
</ul>
</div>
{# ----- Contexte recherche --------------------------------------------- #}
{% block contexte %}
{% include 'fiche/_includes/contexte-recherche.html.twig' with contexte only %}
{% endblock %}
</section>
<aside>
{% if etablissement.isClient %}
{% include 'fiche/_includes/form-contacter-etablissement.html.twig' %}
{% endif %}
<div class="last-flex">
{% include 'annuaire/_includes/lien-guide.html.twig' %}
{% if etablissement.participant == false %}
{% include '_includes/banners-list.html.twig' with {
'emplacement': [],
} only %}
{% endif %}
{% include '_includes/newsletter.html.twig' %}
{% include '_includes/last-search.html.twig' %}
{% include '_includes/last-establishment.html.twig' %}
</div>
</aside>
</div>
</section>
{# ----- Recommandations ---------------------------------------- #}
{% if etablissement.isClient and etablissement.typeClient in ['établissement', 'internat'] %}
{% include 'fiche/_includes/etablissements-proches-client.html.twig' with {
'quoi': contexte.quoi,
'lieu': contexte.lieu,
'etablissement': etablissement,
'etablissementsProches': etablissementsProches,
} only %}
{% endif %}
{% endblock %}
{% block data_layer %}
<script>
// 1. Contexte global de la page
dataLayer.push({{ {
event: "page_context",
page_type: "fiche_etablissement",
fiche_type: etablissement.typeClient,
site_section: "annuaire",
education_niveau: typeOnglet(etablissement.type),
education_sous_niveau: null,
region: etablissement.ville.departement.region.libelle,
departement: etablissement.ville.departement.id,
ville: etablissement.ville.libelle,
code_postal: etablissement.codePostal,
etablissement_id: etablissement.id,
etablissement_nom: etablissement.denomination,
etablissement_segment: etablissement.isClient ? "client" : "prospect",
contrat_type: etablissement.sousContrat ? "sous_contrat" : "hors_contrat"
}|json_encode(constant('JSON_UNESCAPED_UNICODE'))|raw }});
// 2. Événement métier : vue d’un établissement
dataLayer.push({ ecommerce: null });
dataLayer.push({{ {
event: "view_item",
ecommerce: {
items: [
{
item_id: etablissement.id,
item_name: etablissement.denomination,
item_category: etablissement.typeClient,
item_category2: typeOnglet(etablissement.type),
item_category3: null,
item_category4: etablissement.sousContrat ? "sous_contrat" : "hors_contrat",
location_id: etablissement.ville.departement.id ~ "-" ~ etablissement.codePostal ~ "-" ~ etablissement.ville.libelle
}
]
}
}|json_encode(constant('JSON_UNESCAPED_UNICODE'))|raw }});
</script>
{% if diEnvoyee %}
<script>
dataLayer.push({{ {
event: "lead_demande_information",
etablissement_id: etablissement.id,
etablissement_nom: etablissement.denomination,
etablissement_segment: "client"
}|json_encode(constant('JSON_UNESCAPED_UNICODE'))|raw }});
</script>
{% endif %}
{% endblock %}