{"id":1609,"date":"2026-06-27T12:50:19","date_gmt":"2026-06-27T10:50:19","guid":{"rendered":"https:\/\/villalegrandlarge.fr\/mers\/?page_id=1609"},"modified":"2026-06-27T12:50:35","modified_gmt":"2026-06-27T10:50:35","slug":"avis","status":"publish","type":"page","link":"https:\/\/villalegrandlarge.fr\/mers\/avis\/","title":{"rendered":"Avis"},"content":{"rendered":"<!-- \u2550\u2550 VLL AVIS CLIENTS \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<div id=\"vll-app\">\n\n<!-- HERO STATS -->\n<div class=\"vll-hero\">\n    <p class=\"vll-eyebrow\">T\u00e9moignages v\u00e9rifi\u00e9s<\/p>\n    <h2 class=\"vll-h1\">Ce que nos h\u00f4tes <em>disent de leur s\u00e9jour<\/em><\/h2>\n    <p class=\"vll-lead\">Tous les avis publi\u00e9s ici ont \u00e9t\u00e9 soumis par de v\u00e9ritables locataires et valid\u00e9s manuellement avant publication.<\/p>\n    <div class=\"vll-scores\">\n        <div class=\"vll-score\"><span class=\"vll-num\">9,7<\/span><span class=\"vll-lbl\">Note Booking.com<\/span><\/div>\n        <div class=\"vll-score\"><span class=\"vll-num\" id=\"vll-total\">0<\/span><span class=\"vll-lbl\">Avis publi\u00e9s<\/span><\/div>\n        <div class=\"vll-score\"><span class=\"vll-num\">\u2605\u2605\u2605\u2605<\/span><span class=\"vll-lbl\">Meubl\u00e9 de tourisme<\/span><\/div>\n    <\/div>\n<\/div>\n\n<!-- FILTRES -->\n<div class=\"vll-filters\">\n    <span class=\"vll-flabel\">Filtrer :<\/span>\n    <button class=\"vll-fbtn active\" onclick=\"vllFilter('all',this)\">Tous<\/button>\n    <button class=\"vll-fbtn\" onclick=\"vllFilter(5,this)\">\u2605\u2605\u2605\u2605\u2605<\/button>\n    <button class=\"vll-fbtn\" onclick=\"vllFilter(4,this)\">\u2605\u2605\u2605\u2605<\/button>\n    <button class=\"vll-fbtn\" onclick=\"vllFilter('booking',this)\">Booking.com<\/button>\n    <button class=\"vll-fbtn\" onclick=\"vllFilter('airbnb',this)\">Airbnb<\/button>\n    <button class=\"vll-fbtn\" onclick=\"vllFilter('direct',this)\">Direct<\/button>\n    <select class=\"vll-sort\" onchange=\"vllSort(this.value)\">\n        <option value=\"recent\">Plus r\u00e9cents<\/option>\n        <option value=\"note\">Meilleure note<\/option>\n    <\/select>\n<\/div>\n\n<!-- GRILLE AVIS -->\n<div class=\"vll-grid\" id=\"vll-grid\"><\/div>\n\n<!-- S\u00c9PARATEUR -->\n<div class=\"vll-sep\">Partagez votre exp\u00e9rience<\/div>\n\n<!-- FORMULAIRE -->\n<div class=\"vll-form-wrap\" id=\"vll-form-section\">\n    <div class=\"vll-form-hdr\">\n        <h3>Laisser un avis<\/h3>\n        <p>Vous avez s\u00e9journ\u00e9 \u00e0 la Villa Le Grand Large ? Votre retour aide les futurs voyageurs.<\/p>\n    <\/div>\n    <div id=\"vll-msg\" class=\"vll-msg\" style=\"display:none\"><\/div>\n    <div class=\"vll-grid2\" id=\"vll-form-fields\">\n        <!-- honeypot -->\n        <input type=\"text\" name=\"website\" id=\"vll-hp\" style=\"display:none;visibility:hidden;position:absolute\" tabindex=\"-1\" autocomplete=\"off\">\n\n        <div class=\"vll-fg\">\n            <label>Pr\u00e9nom <span class=\"vll-req\">*<\/span><\/label>\n            <input type=\"text\" id=\"vll-prenom\" placeholder=\"Marie\">\n        <\/div>\n        <div class=\"vll-fg\">\n            <label>Nom (initiale) <span class=\"vll-req\">*<\/span><\/label>\n            <input type=\"text\" id=\"vll-nom\" placeholder=\"D.\">\n        <\/div>\n        <div class=\"vll-fg\">\n            <label>E-mail (non publi\u00e9) <span class=\"vll-req\">*<\/span><\/label>\n            <input type=\"email\" id=\"vll-email\" placeholder=\"votre@email.fr\">\n        <\/div>\n        <div class=\"vll-fg\">\n            <label>P\u00e9riode du s\u00e9jour <span class=\"vll-req\">*<\/span><\/label>\n            <input type=\"text\" id=\"vll-date\" placeholder=\"Juillet 2025\">\n        <\/div>\n        <div class=\"vll-fg\">\n            <label>Plateforme<\/label>\n            <select id=\"vll-source\">\n                <option value=\"direct\">R\u00e9servation directe<\/option>\n                <option value=\"booking\">Booking.com<\/option>\n                <option value=\"airbnb\">Airbnb<\/option>\n            <\/select>\n        <\/div>\n        <div class=\"vll-fg\">\n            <label>Note globale <span class=\"vll-req\">*<\/span><\/label>\n            <div class=\"vll-stars-input\">\n                <input type=\"radio\" name=\"vll_note\" id=\"vs5\" value=\"5\"><label for=\"vs5\">\u2605<\/label>\n                <input type=\"radio\" name=\"vll_note\" id=\"vs4\" value=\"4\"><label for=\"vs4\">\u2605<\/label>\n                <input type=\"radio\" name=\"vll_note\" id=\"vs3\" value=\"3\"><label for=\"vs3\">\u2605<\/label>\n                <input type=\"radio\" name=\"vll_note\" id=\"vs2\" value=\"2\"><label for=\"vs2\">\u2605<\/label>\n                <input type=\"radio\" name=\"vll_note\" id=\"vs1\" value=\"1\"><label for=\"vs1\">\u2605<\/label>\n            <\/div>\n        <\/div>\n        <div class=\"vll-fg vll-full\">\n            <label>Titre de votre avis<\/label>\n            <input type=\"text\" id=\"vll-titre\" placeholder=\"Un s\u00e9jour ressour\u00e7ant face \u00e0 la mer\u2026\">\n        <\/div>\n        <div class=\"vll-fg vll-full\">\n            <label>Votre avis <span class=\"vll-req\">*<\/span><\/label>\n            <textarea id=\"vll-texte\" placeholder=\"D\u00e9crivez votre s\u00e9jour : l'appartement, la vue, l'accueil, les points forts\u2026\"><\/textarea>\n        <\/div>\n        <div class=\"vll-fg vll-full\">\n            <div class=\"vll-mention\">\n                <strong>\ud83d\udd12 Mod\u00e9ration manuelle.<\/strong> Votre avis sera lu et valid\u00e9 avant publication (d\u00e9lai : 48 h). Votre e-mail ne sera jamais publi\u00e9 ni transmis \u00e0 des tiers.\n            <\/div>\n        <\/div>\n        <div class=\"vll-fg vll-full\">\n            <button class=\"vll-submit\" onclick=\"vllSubmit()\">Envoyer mon avis \u2192<\/button>\n        <\/div>\n    <\/div>\n    <div id=\"vll-success\" style=\"display:none\" class=\"vll-success\">\n        <div class=\"vll-check\">\u2713<\/div>\n        <h3>Merci pour votre t\u00e9moignage !<\/h3>\n        <p>Votre avis a bien \u00e9t\u00e9 re\u00e7u et sera publi\u00e9 apr\u00e8s v\u00e9rification sous 48 h.<\/p>\n    <\/div>\n<\/div>\n\n<\/div><!-- \/vll-app -->\n\n<script>\n(function(){\nconst VLL_DATA  = [];\nconst VLL_NONCE = '9ea8ef8442';\nconst VLL_AJAX  = 'https:\/\/villalegrandlarge.fr\/mers\/wp-admin\/admin-ajax.php';\n\nlet filter = 'all', sort = 'recent';\n\nconst COLORS = ['#2a6496','#1a6b5e','#7b4f9e','#c0392b','#d35400'];\nfunction avatarColor(n){ return COLORS[n.charCodeAt(0) % COLORS.length]; }\nfunction starsHtml(n){ return [1,2,3,4,5].map(i=>`<span class=\"vll-s${i<=n?' vll-son':''}\">\u2605<\/span>`).join(''); }\nfunction sourceLabel(s){ return {booking:'Booking.com',airbnb:'Airbnb',direct:'R\u00e9servation directe'}[s]||s; }\n\nfunction render(){\n    let d = [...VLL_DATA];\n    if(filter==='booking') d=d.filter(a=>a.source==='booking');\n    else if(filter==='airbnb') d=d.filter(a=>a.source==='airbnb');\n    else if(filter==='direct') d=d.filter(a=>a.source==='direct');\n    else if(typeof filter==='number') d=d.filter(a=>a.note===filter);\n    if(sort==='note') d.sort((a,b)=>b.note-a.note||b.id-a.id);\n    else d.sort((a,b)=>b.id-a.id);\n\n    document.getElementById('vll-grid').innerHTML = d.map(a=>{\n        const long = a.texte.length > 220;\n        const tid  = 'vt'+a.id;\n        return `<article class=\"vll-card${a.featured?' vll-feat':''}\" data-note=\"${a.note}\" data-src=\"${a.source}\">\n            ${a.featured?'<span class=\"vll-feat-badge\">\u2605 Coup de c\u0153ur<\/span>':''}\n            <div class=\"vll-ch\">\n                <div class=\"vll-av\" style=\"background:${avatarColor(a.prenom)}\">${a.prenom[0]}<\/div>\n                <div class=\"vll-cm\">\n                    <div class=\"vll-cname\">${a.prenom} ${a.nom}<\/div>\n                    <div class=\"vll-cinfo\">${a.date} \u00b7 <span class=\"vll-src-badge\">${sourceLabel(a.source)}<\/span> <span class=\"vll-ok\">\u2713<\/span><\/div>\n                <\/div>\n            <\/div>\n            <div class=\"vll-stars\">${starsHtml(a.note)}<\/div>\n            ${a.titre?`<div class=\"vll-ctitle\">${a.titre}<\/div>`:''}\n            <p class=\"vll-cbody${long?' vll-col':''}\" id=\"${tid}\">${a.texte}<\/p>\n            ${long?`<button class=\"vll-more\" onclick=\"vllToggle('${tid}',this)\">Lire la suite<\/button>`:''}\n            <div class=\"vll-csrc\">Avis v\u00e9rifi\u00e9 \u00b7 villalegrandlarge.fr<\/div>\n        <\/article>`;\n    }).join('');\n}\n\nwindow.vllFilter = function(v, btn){\n    filter = v;\n    document.querySelectorAll('.vll-fbtn').forEach(b=>b.classList.remove('active'));\n    btn.classList.add('active');\n    render();\n};\nwindow.vllSort = function(v){ sort=v; render(); };\nwindow.vllToggle = function(id, btn){\n    const el=document.getElementById(id);\n    el.classList.toggle('vll-col');\n    btn.textContent = el.classList.contains('vll-col')?'Lire la suite':'R\u00e9duire';\n};\n\nwindow.vllSubmit = function(){\n    const prenom = document.getElementById('vll-prenom').value.trim();\n    const nom    = document.getElementById('vll-nom').value.trim();\n    const email  = document.getElementById('vll-email').value.trim();\n    const date   = document.getElementById('vll-date').value.trim();\n    const texte  = document.getElementById('vll-texte').value.trim();\n    const note   = document.querySelector('input[name=\"vll_note\"]:checked');\n    const hp     = document.getElementById('vll-hp').value;\n\n    const msg    = document.getElementById('vll-msg');\n\n    function showErr(t){ msg.textContent=t; msg.className='vll-msg vll-err'; msg.style.display='block'; msg.scrollIntoView({behavior:'smooth',block:'center'}); }\n\n    if(!prenom||!nom||!email||!date||!texte||!note){ showErr('Merci de remplir tous les champs obligatoires (*).'); return; }\n    if(!\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(email)){ showErr('Adresse e-mail invalide.'); return; }\n\n    const btn = document.querySelector('.vll-submit');\n    btn.disabled = true;\n    btn.textContent = 'Envoi en cours\u2026';\n\n    const fd = new FormData();\n    fd.append('action',     'vll_submit_avis');\n    fd.append('nonce',      VLL_NONCE);\n    fd.append('prenom',     prenom);\n    fd.append('nom',        nom);\n    fd.append('email',      email);\n    fd.append('date_sejour',date);\n    fd.append('texte',      texte);\n    fd.append('note',       note.value);\n    fd.append('titre',      document.getElementById('vll-titre').value.trim());\n    fd.append('source',     document.getElementById('vll-source').value);\n    fd.append('website',    hp);\n\n    fetch(VLL_AJAX, { method:'POST', body:fd })\n        .then(r=>r.json())\n        .then(data=>{\n            if(data.success){\n                document.getElementById('vll-form-fields').style.display='none';\n                document.getElementById('vll-success').style.display='block';\n                msg.style.display='none';\n            } else {\n                showErr(data.data.message||'Une erreur est survenue.');\n                btn.disabled=false;\n                btn.textContent='Envoyer mon avis \u2192';\n            }\n        })\n        .catch(()=>{\n            showErr('Erreur r\u00e9seau. Veuillez r\u00e9essayer.');\n            btn.disabled=false;\n            btn.textContent='Envoyer mon avis \u2192';\n        });\n};\n\nrender();\n})();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_noindex_seo_override":0,"_noindex_seo_noindex":0,"_noindex_seo_nofollow":0,"_noindex_seo_noarchive":0,"_noindex_seo_nosnippet":0,"_noindex_seo_noimageindex":0,"footnotes":""},"class_list":["post-1609","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/villalegrandlarge.fr\/mers\/wp-json\/wp\/v2\/pages\/1609","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/villalegrandlarge.fr\/mers\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/villalegrandlarge.fr\/mers\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/villalegrandlarge.fr\/mers\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/villalegrandlarge.fr\/mers\/wp-json\/wp\/v2\/comments?post=1609"}],"version-history":[{"count":1,"href":"https:\/\/villalegrandlarge.fr\/mers\/wp-json\/wp\/v2\/pages\/1609\/revisions"}],"predecessor-version":[{"id":1610,"href":"https:\/\/villalegrandlarge.fr\/mers\/wp-json\/wp\/v2\/pages\/1609\/revisions\/1610"}],"wp:attachment":[{"href":"https:\/\/villalegrandlarge.fr\/mers\/wp-json\/wp\/v2\/media?parent=1609"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}