Besloten Webshop voor PrestaShop: volledige handleiding
DataFirefly Besloten Webshop installeren en instellen: toegangsmodi, inlogpagina, inloggen met Google, Facebook, Apple en Instagram, goedkeuring van accounts en prijzen alleen voor leden.
<p>DataFirefly Besloten Webshop houdt je PrestaShop 8 en 9 webshop helemaal of gedeeltelijk voor door jou goedgekeurde klanten. Deze handleiding behandelt de installatie, de drie toegangsmodi, de vormgeving van de privépagina, social login, de afhandeling van aanvragen en de modus prijzen alleen voor leden.</p>
<h2>Installatie</h2>
<p>Ga in de backoffice naar Modules > Modulebeheer > Een module uploaden en sleep het ZIP-bestand erin. Bij de installatie maakt de module haar tabellen aan, voegt het tabblad Klanten > Toegangsaanvragen toe en registreert ze de privépagina (een URL als /module/dfprivateshop/private, herschreven naar /besloten-toegang/ als vriendelijke URL’s aanstaan).</p>
<p>Open daarna de moduleconfiguratie. Een balk bovenaan toont de huidige status, je IP-adres en de redirect-URI die je bij de social login providers opgeeft, en meldt knelpunten: ontbrekende cURL-extensie, map img/dfprivateshop niet beschrijfbaar, paginacachemodule geïnstalleerd.</p>
<div class=”df-callout note”><p>De module wordt uitgeschakeld geleverd. Er verandert niets aan je webshop tot je in het tabblad Toegang een modus kiest.</p></div>
<h2>Een toegangsmodus kiezen</h2>
<h3>De hele webshop is besloten</h3>
<p>Elke pagina vereist een account. Bereikbaar blijven: de inlogpagina van de module, de contactpagina als je die toestaat, de CMS-pagina’s die je als openbaar opgeeft, de pagina om een wachtwoord opnieuw in te stellen en de controllers van betaalmodules. Dit is de modus voor een groothandel, een club of een webshop in opbouw.</p>
<h3>Alleen geselecteerde delen zijn besloten</h3>
<p>Je wijst categorieën aan (subcategorieën volgen automatisch), producten op ID, merken, leveranciers, CMS-pagina’s, de homepage en URL-patronen met het teken <code>*</code>. De betrokken producten verdwijnen ook uit lijsten, zoekresultaten, autocomplete, facetfilters en de productblokken van andere modules, zodat er geen naam, afbeelding of prijs doorschemert.</p>
<h3>Prijzen alleen voor leden</h3>
<p>Een aparte schakelaar, bruikbaar met de webshopmodus uitgeschakeld of samen met geselecteerde delen. De catalogus blijft openbaar en indexeerbaar, maar bezoekers zonder toegang zien geen prijzen, geen winkelwagenknop en geen prijsfilter of sortering op prijs. De module zet de standaard catalogusmodus van PrestaShop alleen voor het huidige verzoek aan en schrijft niets naar de database.</p>
<h2>Wie toegang krijgt</h2>
<ul>
<li><strong>Ingelogde, actieve klanten.</strong> Zet je de groepsbeperking aan, dan komen alleen accounts uit de gekozen groepen binnen; de rest ziet het bericht dat de toegang is geweigerd.</li>
<li><strong>Uitnodigingscodes.</strong> Eén code per regel, met een geldigheid in dagen. Een code uit de lijst halen trekt hem meteen in, ook voor wie hem al had ingevuld.</li>
<li><strong>IP-adressen op de whitelist.</strong> Eén IP of CIDR-bereik per regel, IPv4 en IPv6. Handig voor een kantoor, een leverancier of een testmachine.</li>
<li><strong>Zoekmachinebots</strong>, als je de optie aanzet. Googlebot, Bingbot, Applebot en DuckDuckBot worden via reverse en daarna forward DNS gecontroleerd: een vervalste user agent komt er niet door.</li>
</ul>
<h2>De privépagina vormgeven</h2>
<p>Het tabblad Vormgeving bepaalt het uiterlijk. Twee indelingen: volledig scherm, met de formulierkaart links, in het midden of rechts van de media, of gesplitst, met de media aan de ene en het formulier aan de andere kant, breedte instelbaar tussen 35 en 70 procent.</p>
<p>De achtergrond accepteert een afbeelding, een diavoorstelling van twee of drie afbeeldingen met langzame zoom, een video, of een video en een afbeelding. Voor video: een geüpload MP4- of WebM-bestand (stille lus van 10 tot 30 seconden, bij voorkeur onder 8 MB), een YouTube-URL ingesloten in privacyvriendelijke modus, of een Vimeo-URL. Voor telefoons kun je een aparte afbeelding instellen, waar de media een banner boven het formulier, een achtergrond of verborgen kan worden.</p>
<p>De bestanden staan in <code>img/dfprivateshop/</code>, buiten de modulemap, dus ze overleven updates. Stel daarna de overlay, de accentkleur, de hoekradius, de kaartstijl (licht, donker of matglas), het logo en de taalkiezer in. De knop Voorbeeld in de balk toont de pagina zoals bezoekers die zien, zonder de webshop te sluiten.</p>
<div class=”df-callout tip”><p>Video laadt standaard niet op telefoons, en ook niet wanneer de bezoeker databesparing aan heeft of om minder beweging vroeg. Voorzie dus altijd een afbeelding: die dient ook als poster tijdens het laden.</p></div>
<h2>Toegangsaanvragen en goedkeuring van accounts</h2>
<p>In het tabblad Registratie bepaal je of het aanvraagtabblad op de privépagina verschijnt, welke velden worden aangeboden (bedrijf, bedrijfs-ID of btw-nummer, geboortedatum, bericht, nieuwsbrief, aanbiedingen van partners) en welke verplicht zijn. Een AVG-vinkje kan naar een CMS-pagina verwijzen; de datum van akkoord wordt bij de aanvraag opgeslagen.</p>
<p>Met handmatige goedkeuring maakt elke registratie een inactief account en een regel in Klanten > Toegangsaanvragen. Je filtert op status, herkomst of bedrijf en keurt goed of af, los of in bulk. De klant krijgt de bijbehorende e-mail, in zijn taal. Adressen van de domeinen die je opgeeft kunnen automatisch worden goedgekeurd, en je team kan bij elke nieuwe aanvraag een melding krijgen.</p>
<p>De klantpagina toont de aanvraag en de gekoppelde social accounts. Een klant daar activeren geldt als goedkeuring: de status van de aanvraag volgt en de e-mail gaat de deur uit.</p>
<h2>Inloggen met Google, Facebook, Apple en Instagram</h2>
<p>Elke provider schakel je apart in op het tabblad Social login. Kopieer de redirect-URI uit de balk: die moet exact zo bij de provider worden opgegeven.</p>
<ul>
<li><strong>Google</strong>: maak in Google Cloud Console een OAuth-client van het type webapplicatie en neem de client-ID en het secret over.</li>
<li><strong>Facebook</strong>: maak een app in Meta for Developers, voeg het product Facebook Login toe en neem de app-ID en het secret over.</li>
<li><strong>Apple</strong>: maak een Services ID in je Apple developer-account en daarna een Sign in with Apple-sleutel. Je hebt de Services ID, de Team ID, de Key ID en de volledige inhoud van het .p8-bestand nodig, inclusief de regels BEGIN en END.</li>
<li><strong>Instagram</strong>: Instagram Business Login verifieert alleen professionele accounts en geeft nooit een e-mailadres door. De klant vult dat na het inloggen in op een kort formulier.</li>
</ul>
<p>Hoort het teruggegeven e-mailadres al bij een klantaccount, dan vraagt de module eenmalig het wachtwoord van dat account voordat beide worden gekoppeld, tenzij je hebt gekozen om door de provider bevestigde adressen automatisch te koppelen. De knoppen kunnen ook op de standaard inlogpagina van het thema verschijnen.</p>
<div class=”df-callout warn”><p>Social login vereist de PHP-extensie cURL en een redirect-URI via HTTPS. De configuratiebalk meldt een ontbrekende cURL en de status van de vriendelijke URL’s.</p></div>
<h2>Paginacache</h2>
<p>Pagina’s die worden gemaakt voor een bezoeker met toegang gaan met headers de deur uit die caching verbieden, ook voor LiteSpeed, Varnish en CDN’s. Gebruik je een paginacachemodule, schakel dan in de instellingen daarvan de cache uit voor ingelogde klanten: anders krijgt een lid mogelijk de anonieme versie van een pagina, zonder de voorbehouden producten of prijzen. De Smarty-cache wordt geleegd telkens als je de module-instellingen opslaat.</p>
<h2>Problemen oplossen</h2>
<ul>
<li><strong>Je komt niet meer in je eigen webshop</strong>: zet je IP-adres, te zien in de configuratiebalk, op de whitelist.</li>
<li><strong>Een knop van een provider verschijnt niet</strong>: die staat aan maar de gegevens zijn onvolledig. De configuratiebalk meldt dat.</li>
<li><strong>Een social login geeft een fout</strong>: controleer of de bij de provider opgegeven redirect-URI exact die uit de balk is, inclusief protocol en subdomein.</li>
<li><strong>Prijzen blijven zichtbaar</strong>: kijk of de bezoeker niet onder de IP-whitelist of een uitnodigingscode valt, en leeg de paginacache.</li>
<li><strong>Een privéproduct staat nog in een blok</strong>: het gebruikte thema hanteert waarschijnlijk niet de verwachte klasse product-miniature. Neem contact op met de naam van het thema.</li>
</ul>