Smart Offers: volledige gids
Alles wat u moet weten om de module Smart Offers op PrestaShop 8 en 9 te configureren en te benutten: de vier types gegroepeerde aanbiedingen, de automatische toevoegengine en de migratieprocedure.
Smart Offers is een module compatibel met PrestaShop 8 en 9 waarmee u gegroepeerde aanbiedingen 1+1, grootverpakkingen, multi-productpacks en keuzeaanbiedingen kunt maken, met automatisch toevoegen van de gratis producten aan de winkelwagen en een verzorgde presentatie op de productpagina.
Overzicht
Smart Offers dekt de vier meest gebruikte formaten van gegroepeerde aanbiedingen in e-commerce in één enkele module, zonder complexe configuratie. De engine evalueert de winkelwagen bij elke wijziging, voegt de gratis producten automatisch toe zodra aan de voorwaarden is voldaan, en maakt een winkelwagenregel aan die deze eenheden gratis maakt. De klantervaring is direct en leesbaar.
Compatibiliteit met PrestaShop 8 en 9
Sinds versie 2.0.0 dekt één enkel ZIP-bestand PrestaShop 8.0 tot 9.x. Er is geen aparte branch te kiezen bij het downloaden: de module detecteert de winkelversie bij de uitvoering en past haar aanroepen aan de API’s aan die tussen de twee generaties zijn veranderd.
| Element | PrestaShop 8 | PrestaShop 9 |
|---|---|---|
| Vereiste PHP-versie | 7.4 tot 8.3 | 8.1 tot 8.3 |
| Databaseschema | Identiek, zes tabellen ps_dfoffers_* | |
| Gebruikte hooks | Identiek | |
| Configuratie van de aanbiedingen | Identiek, transparante migratie | |
DfOfferCompat. Overschrijft u modulecode in een maatwerkproject, dan is dat het enige bestand om te raadplegen om de versievertakkingen te begrijpen.Installatie
- Download het bestand
dfoffers-vX.Y.Z.zipvanuit uw DataFirefly-klantomgeving - Ga in de PrestaShop back-office naar Modules → Modulebeheer
- Klik bovenaan de pagina op de knop Een module uploaden
- Sleep het ZIP-bestand erin of klik om het te selecteren
- De installatie is automatisch: de tabellen worden aangemaakt, de hooks geregistreerd, en een nieuw tabblad Catalogus → Gegroepeerde aanbiedingen verschijnt in het menu
De vier aanbiedingstypes
1+1 op hetzelfde product
Het virale formaat van de buy-one-get-one: de klant koopt één eenheid van een product en krijgt gratis een andere eenheid van hetzelfde product. U configureert:
- Eén enkel product (dat tegelijk als trigger en als beloning dient)
- De te kopen hoeveelheid om de aanbieding te activeren (meestal 1)
- De gratis hoeveelheid (meestal 1)
Typisch voorbeeld: “Bij 1 gekocht paar sokken is het tweede paar gratis.” Wanneer de klant het paar aan zijn winkelwagen toevoegt, voegt de engine er automatisch een tweede aan toe en past ze een korting toe gelijk aan de eenheidsprijs.
Koop X, ontvang Y gratis (verschillende producten)
Bundelformaat: meerdere verschillende triggerproducten moeten in de winkelwagen aanwezig zijn om de aanbieding te activeren, en één of meerdere andere producten zijn dan gratis. U configureert:
- De lijst met triggerproducten met hun respectieve hoeveelheid
- De lijst met gratis producten met hun respectieve hoeveelheid
Typisch voorbeeld: “Bij de gezamenlijke aankoop van een dagcrème en een serum ontvangt u een gratis maskersample.” De engine controleert of alle triggers aanwezig zijn voordat de aanbieding wordt geactiveerd.
Keuze uit varianten
Formaat van vrije samenstelling: u definieert een set kandidaat-producten of -varianten waaruit de klant zijn set samenstelt. De engine identificeert automatisch de goedkoopste eenheden van de winkelwagen als de gratis eenheden, wat overeenkomt met de standaard commerciële interpretatie van de buy-N-get-M.
- De lijst met kandidaat-producten of -varianten
- Het aantal in deze set te kopen eenheden
- Het aantal gratis eenheden (de goedkoopste)
Typisch voorbeeld: “3 gekochte t-shirts uit onze selectie, het goedkoopste is gratis.” De klant stelt zijn set samen, de engine raakt zijn winkelwagen niet aan maar past de korting toe op de goedkoopste eenheden.
Grootverpakking
B2B- en voorraadafbouwformaat: voor elke set van X gekochte eenheden van een product ontvangt de klant Y gratis eenheden van een ander product. U configureert:
- Het triggerproduct met de drempelhoeveelheid (bijvoorbeeld 10)
- Het gratis product met de gratis hoeveelheid (bijvoorbeeld 20)
Typisch voorbeeld: “Bij 10 gekochte flessen wijn, 2 gratis glazen.” Praktisch voor leveranciers die een aanvullend product willen pushen of een slapende voorraad willen afbouwen door hem aan een goedlopend product te koppelen.
Uw eerste aanbieding aanmaken
Ga vanuit de back-office naar Catalogus → Gegroepeerde aanbiedingen en klik op Nieuwe aanbieding.
Stap 1: het type kiezen
Vier visuele kaarten tonen de beschikbare types met een korte beschrijving. Klik op die welke bij uw commerciële operatie past. Het formulier past zich automatisch aan en toont alleen de voor dat type relevante velden.
Stap 2: de aanbieding benoemen en badgen
Vul in:
- Naam van de aanbieding (verplicht): dat is wat de klant in de banner ziet. Eén veld per actieve taal van de winkel.
- Badgetekst (optioneel, max. 64 tekens): kort bericht dat in de pill bovenaan de banner verschijnt (bijvoorbeeld 1+1 GRATIS, SPECIALE AANBIEDING, BLACK FRIDAY).
- Badgekleur: zes DataFirefly-presets beschikbaar plus een vrije kleurkiezer. De kleur wordt gebruikt voor de banner op de productpagina EN voor de cadeaustip aan winkelwagenzijde.
Stap 3: de triggerproducten toevoegen
Klik op Een triggerproduct toevoegen. Een zoekvenster opent met een veld dat uw catalogus live bevraagt (zoekopdracht met 250 ms vertraging na de laatste toetsaanslag). Typ een naam, een referentie of een EAN; de resultaten verschijnen onmiddellijk.
Klik op het product om het toe te voegen. Heeft het product varianten, dan verschijnen die als knoppen onder het resultaat; klik op de gewenste om ze direct toe te voegen. Geef de vereiste hoeveelheid op in het veld dat rechts van de regel verschijnt.
Stap 4: de gratis producten toevoegen
Zelfde procedure voor de gratis producten. Deze sectie is verborgen voor het type Keuze uit varianten, aangezien de varianten tegelijk als kandidaten en als beloningen dienen.
Stap 5: specifieke regels
- Cumuleerbaar: ingeschakeld wordt de aanbieding meerdere keren toegepast, voor elke triggerset. Zonder cumul geldt de aanbieding maar één keer, ongeacht het aantal eenheden. Standaard uitgeschakeld om uw marges te beschermen.
- Voor het type Keuze uit varianten verschijnen twee extra velden: hoeveel eenheden de klant moet kopen, en hoeveel er gratis zijn.
Stap 6: activering
- Geldigheidsdatums: laat leeg voor een permanente aanbieding. Vul de begin- of einddatum in om de activering te automatiseren. Een onleesbare datum wordt geweigerd, en de einddatum moet na de begindatum liggen.
- Prioriteit: kunnen meerdere aanbiedingen tegelijk gelden, dan wordt die met de laagste prioriteit eerst geëvalueerd.
- Status: aan/uit-schakelaar, standaard ingeschakeld. Praktisch om een aanbieding tijdelijk uit te schakelen zonder haar te verwijderen.
Stap 7: winkels (bij multistore)
Vink de winkels aan waarop de aanbieding beschikbaar moet zijn. Niets aanvinken komt neer op het activeren van de aanbieding op alle winkels.
Een aanbieding wijzigen of verwijderen
Vanuit Catalogus → Gegroepeerde aanbiedingen draagt elke regel van de lijst een knop Wijzigen en, in zijn keuzemenu, Verwijderen. De schakelaar in de kolom Ingeschakeld laat ook toe een aanbieding op te schorten zonder haar te verwijderen. Om op meerdere aanbiedingen tegelijk te handelen, vink ze aan en gebruik de groepsacties onderaan de lijst.
Hoe de automatische toevoegengine werkt
De engine haakt in op de PrestaShop-hook actionCartSave en draait bij elke winkelwagenwijziging (toevoegen, verwijderen, hoeveelheidswijziging, samenvoeging bij het inloggen).
- Ze haalt alle actieve aanbiedingen voor de huidige winkel op
- Voor elke aanbieding berekent ze de betaalde hoeveelheid van elk triggerproduct (totale winkelwagenhoeveelheid minus wat de engine bij een vorige evaluatie al automatisch heeft toegevoegd)
- Ze evalueert of aan de voorwaarden van de aanbieding is voldaan
- Zo ja, dan voegt ze de ontbrekende gratis producten aan de winkelwagen toe via
Cart::updateQty - Ze maakt of werkt een winkelwagenregel bij (
CartRule) met een vaste korting incl. btw gelijk aan de waarde van de gratis eenheden - Ze registreert in de tabel
ps_dfoffers_cart_autode eenheden die ze heeft toegevoegd, om ze te kunnen onderscheiden van de eenheden die de klant zelf heeft toegevoegd
Cart::updateQty speelt de hook actionCartSave opnieuw af, maar een statische guard in de module verhindert de recursie.Nette intrekking
Verwijdert de klant een triggerproduct of verlaagt hij de hoeveelheid onder de drempel, dan herevalueert de engine de aanbieding bij de volgende actionCartSave. Is niet meer aan de voorwaarde voldaan, dan verwijdert ze de eenheden die ze automatisch had toegevoegd (zonder de door de klant zelf toegevoegde eenheden aan te raken, dankzij de tracking) en verwijdert ze de bijbehorende winkelwagenregel.
Module-instellingen
Vanuit Modules → Modulebeheer → Smart Offers → Configureren, twee globale instellingen:
- Plaats van de banner op de productpagina. Vijf posities, elk overeenkomend met een hook van het Classic-thema:
- Onder het blok Toevoegen aan winkelwagen (standaard):
displayProductAdditionalInfo - Onder de prijs:
displayProductPriceBlock, typeafter_price - Onder de productafbeeldingen:
displayAfterProductThumbs - In het geruststellingsblok, onder de betaaliconen:
displayReassurance - Volledige breedte, onder de pagina:
displayFooterProduct
De module is aan alle vijf hooks gekoppeld en alleen de gekozen rendert de banner. Roept uw thema de geselecteerde hook niet aan, dan verschijnt de banner niet: kies een andere.
- Onder het blok Toevoegen aan winkelwagen (standaard):
- Compacte banner. Forceert overal de dichte lay-out (kleinere marges, miniaturen van 92 px, groepen naast elkaar). Zonder deze optie neemt de banner deze lay-out al vanzelf aan wanneer zijn kolom smaller is dan 520 px, en stapelt hij de groepen onder de 300 px. De detectie betreft de kolombreedte, niet de vensterbreedte: een smalle productpagina op een brede site wordt als mobiel behandeld.
Weergave op de productpagina
Op elke triggerende productpagina verschijnt een banner met kleurverloop op de in de instellingen gekozen plaats (standaard onder de knop Toevoegen aan winkelwagen). Hij bevat:
- Een witte pill-badge met cadeau-icoon, met de badgetekst
- De titel van de aanbieding
- Een dynamisch bericht dat van het aanbiedingstype afhangt (“Koop er 1, ontvang er 1 extra gratis”, “Voor elke set van 10, ontvang er 20 extra gratis”, enzovoort)
- Een raster met de klikbare miniaturen van de betrokken producten, verdeeld in twee groepen Koop / Ontvang gratis met een cirkelvormige SVG-scheiding ertussen
De kleur van de banner neemt die van de in de aanbieding geconfigureerde badge over. De weergave is responsive: op mobiel stapelen de twee groepen zich verticaal en draait de scheiding om naar beneden te wijzen.
Weergave in de winkelwagen
Twee aparte indicatoren helpen de klant de gratis producten in zijn winkelwagen te herkennen.
Cadeaustip op elke regel
Op elke winkelwagenregel die door een aanbieding automatisch toegevoegde eenheden bevat, verschijnt een kleine gekleurde stip 🎁 ×N gratis in de informatiekolom van het product, onder de prijs en de varianten. De kleur neemt die van de badge van de aanbieding over, en de stip geeft aan hoeveel eenheden van deze regel gratis zijn (nuttig wanneer een deel van de hoeveelheid betaald is en de rest gratis, bijvoorbeeld bij een 1+1 op hetzelfde product).
displayProductPriceBlock (type unit_price), die het Classic-thema in de informatiekolom van elke winkelwagenregel aanroept. Voor thema’s die deze hook niet aanroepen, valt de module terug op displayCartExtraProductActions in de actiekolom. Een register per verzoek garandeert dat een regel maar één keer wordt gedecoreerd, ook als het thema beide hooks aanbiedt.Gedetailleerde winkelwagenfooter
Onderaan het productraster vat een groen blok de in de winkelwagen geactiveerde aanbiedingen samen. Voor elke aanbieding toont het blok:
- De naam van de aanbieding en haar badgetekst (in gekleurde pill)
- De lijst met door deze aanbieding gratis gemaakte producten, als visuele chips met ronde miniatuur, naam (met variant, bijvoorbeeld “Kussen bruine beer (Kleur: Wit)”) en hoeveelheid
- Elke chip is klikbaar en verwijst naar de productpagina van het cadeau
De klant kan zo in één oogopslag controleren wat hij gratis heeft gekregen en dankzij welke commerciële operatie.
Bijzondere gevallen en gedragingen
Waarom de 1+1 op hetzelfde product specifiek wordt behandeld
Wanneer het triggerproduct ook het beloningsproduct is, maken veel modules voor gegroepeerde aanbiedingen op de markt de fout de door de klant betaalde eenheid als de al gratis eenheid te identificeren, en passen ze de korting op die eenheid toe. Uiteindelijk betaalt de klant nul voor één eenheid in plaats van er één te betalen en een tweede gratis te ontvangen.
Smart Offers behandelt dit geval met een precieze logica: de doelhoeveelheid in de winkelwagen is door de klant betaalde hoeveelheid + beloningshoeveelheid. Wanneer de klant een eenheid toevoegt, voegt de engine er een tweede aan toe zodat de winkelwagen twee eenheden bevat, en geldt de korting alleen op de tweede eenheid. De klant betaalt dus de prijs van één eenheid om er twee in zijn winkelwagen te hebben.
Aanbiedingen op producten met varianten
Een aanbieding kan een specifieke variant of het product als geheel targeten. Het product in de back-office toevoegen via Hoofdproduct (zonder variant) registreert een joker: de engine leest deze joker exact zoals de banner, dat wil zeggen “eender welke variant”.
- Trigger met joker: de gekochte hoeveelheid is de som van alle varianten van het product in de winkelwagen. Twee witte kussens en een zwart kussen tellen voor drie eenheden.
- Beloning met joker: de engine moet een concrete variant kiezen voordat ze aan de winkelwagen toevoegt. Ze neemt eerst die welke de klant al voor dit product in zijn winkelwagen heeft (een 1+1 op een wit kussen voegt een wit kussen toe). Zit het product nog niet in de winkelwagen, dan neemt ze de in de catalogus gedefinieerde standaardvariant. Een product zonder variant wordt als zodanig toegevoegd.
- Keuze uit varianten met joker: elke in de winkelwagen aanwezige variant wordt een volwaardige kandidaatregel, waardoor de prijssortering de goedkoopste kan aanwijzen.
Cumul van de sets (optie stackable)
Zonder cumul geldt de aanbieding maar één keer, ongeacht het aantal triggersets in de winkelwagen. Koopt de klant 5 eenheden van een product met een 1+1-aanbieding en stackable uitgeschakeld, dan ontvangt hij 1 gratis eenheid (geen 5).
Met cumul ingeschakeld vermenigvuldigt de engine het aantal beloningssets met het gehele aantal aanwezige triggersets. Voor dezelfde 1+1-aanbieding met stackable ingeschakeld en 5 eenheden in de winkelwagen ontvangt de klant 5 gratis eenheden (eindwinkelwagen: 10 eenheden, 5 betaald).
Voorraad en onbeschikbaarheid
Het toevoegen van de gratis producten aan de winkelwagen loopt via Cart::updateQty, dat de native voorraadregels van PrestaShop respecteert. Is een gratis product uitverkocht en staat de winkel bestellen zonder voorraad niet toe, dan mislukt het toevoegen stilzwijgend en wordt de korting niet toegepast. De voorwaarde blijft klaar om te activeren zodra de voorraad is aangevuld.
Meerdere gelijktijdige aanbiedingen op eenzelfde winkelwagen
Elke aanbieding genereert haar eigen winkelwagenregel met partial_use ingeschakeld. Dat laat toe meerdere gelijktijdige aanbiedingen op eenzelfde winkelwagen te stapelen zonder conflict, en blijft compatibel met de klassieke promocodes die uw klanten kunnen invoeren.
Moduletalen
Sinds 2.1.2 is de brontaal van de module Engels en worden zeven vertalingen geleverd in de map translations/: Frans, Duits, Italiaans, Spaans, Nederlands, Portugees en Pools. Ze dekken de banner op de productpagina, de winkelwagen, de naam van de winkelwagenregel die de klant ziet, het formulier voor het aanmaken van aanbiedingen en de berichten van de productkiezer.
Elke tekst blijft wijzigbaar vanuit Internationaal → Vertalingen door de module dfoffers te kiezen. Een winkel in een niet-geleverde taal toont het Engels en kan op dezelfde plek worden vertaald.
Technische architectuur
Gebruikte hooks
displayProductAdditionalInfo,displayProductPriceBlock(typeafter_price),displayAfterProductThumbs,displayReassurance,displayFooterProduct: banner op de productpagina, slechts één actief volgens de instellingendisplayShoppingCartFooter: gedetailleerde footer op de winkelwagenpaginadisplayProductPriceBlock: cadeaustip in de infokolom van elke winkelwagenregel (typeunit_price, alleen winkelwagenpagina)displayCartExtraProductActions: cadeaustip als fallback, in de actiekolomactionCartSave: evaluatie- en automatische toevoegengineactionFrontControllerSetMediaenactionAdminControllerSetMedia: injectie van de CSS en JSactionObjectProductDeleteAfter: automatische opschoning van aanbiedingen die naar een verwijderd product verwijzen
Alleen actionCartSave en actionFrontControllerSetMedia worden bij de installatie als onmisbaar beschouwd. De weergavehooks die een thema niet zou implementeren, worden gelogd zonder de installatie te laten mislukken.
Toegevoegde tabellen
ps_dfoffers_offer: configuratie van elke aanbieding (type, datums, prioriteit, cumul)ps_dfoffers_offer_lang: naam, badge en beschrijving vertaald per taalps_dfoffers_trigger: triggerproducten van elke aanbiedingps_dfoffers_reward: beloningsproducten van elke aanbiedingps_dfoffers_shop: koppeling aanbieding / winkel in multistoreps_dfoffers_cart_auto: tracking van de automatisch toegevoegde eenheden per winkelwagen en per aanbieding, met het ID van de gegenereerde winkelwagenregel
Alle tabellen krijgen het in uw PrestaShop-installatie geconfigureerde voorvoegsel (standaard ps_). Het schema is identiek op PrestaShop 8 en 9, wat de migratie transparant maakt.
De klasse DfOfferCompat
Alle API-verschillen tussen PrestaShop 8 en 9 zijn geconcentreerd in classes/DfOfferCompat.php. De rest van de module test de PrestaShop-versie nooit direct. De door deze klasse geabsorbeerde punten:
- Lezen van de varianten: PrestaShop 9 heeft het taalargument uit
Product::getAttributeCombinations()verwijderd, waar de eerste parameter nu de booleaanse groeperingsvlag is. - AJAX-URL van de back-office: op PrestaShop 9 moet het paar
ajaxenactionvia het vierde argument vangetAdminLink()passeren, omdat het token vóór de samenvoeging van de parameters wordt berekend. - JSON-antwoord: de verzendmethode draagt opzettelijk een andere naam dan
ajaxRender(), waarvan de parent-signatuur niet mag worden overschreven. - Admintabblad: PrestaShop 9 heeft extra vertaalkolommen geïntroduceerd, onder guard ingevuld om geen dynamische property op PrestaShop 8 aan te maken.
De templates in uw thema overschrijven
De CSS van de module is geïsoleerd onder het voorvoegsel .dfoffers- om elk conflict met uw stylesheet te vermijden. Wilt u de weergave wijzigen, kopieer dan de templates van /modules/dfoffers/views/templates/hook/ naar /themes/uw-thema/modules/dfoffers/views/templates/hook/ en personaliseer ze. Drie templates zijn beschikbaar:
product-banner.tpl: banner op de productpaginacart-offer.tpl: samenvattend blok in de winkelwagenfootercart-line-gift.tpl: inline cadeaustip op de winkelwagenregels
Module bijwerken
Om naar een nieuwe versie bij te werken, upload gewoon de nieuwe ZIP vanuit het Modulebeheer. PrestaShop detecteert de versiewijziging in config.xml en voert automatisch de upgradescripts uit in /upgrade/upgrade-X.Y.Z.php, die bijvoorbeeld nieuwe tussen twee versies toegevoegde hooks registreren.
Een winkel migreren van PrestaShop 8 naar PrestaShop 9
Aangezien het databaseschema identiek is, doorstaan uw aanbiedingen, uw vertalingen en uw winkelkoppelingen de migratie zonder transformatie. De aanbevolen procedure:
- Zet de module op 2.x vóór de migratie van de winkel, terwijl ze nog onder PrestaShop 8 draait. De 2.x-versies werken op beide generaties, u vermindert dus het aantal variabelen als er iets misgaat.
- Migreer de winkel naar PrestaShop 9 volgens de officiële PrestaShop-procedure.
- Ga naar Vormgeving → Posities en controleer of de hooks van de module nog gekoppeld zijn. Een migratie kan er verliezen.
- Ontbreken er hooks, upload dan de ZIP opnieuw: het upgradescript herregistreert elke afwezige hook en schoont de trackingregels op waarvan de winkelwagen is verdwenen.
Probleemoplossing
De gratis producten worden niet aan de winkelwagen toegevoegd
- Leeg de PrestaShop-cache in Geavanceerde instellingen → Prestaties
- Controleer of de hook
actionCartSavede module daadwerkelijk bevat in Vormgeving → Posities - Controleer of het gratis product beschikbaar is (niet uitverkocht als bestellen zonder voorraad verboden is, niet uitgeschakeld, aan de huidige winkel toegewezen)
- Heeft het triggerproduct varianten en verschijnt de banner wel op de pagina, controleer dan of de module op 2.0.1 of hoger staat: eerdere versies lazen de joker “alle varianten” niet aan enginezijde
- Raadpleeg Geavanceerde instellingen → Logs en zoek
dfoffers: de engine traceert haar uitvoering bij elke toevoeging aan de winkelwagen
De korting wordt niet toegepast ondanks het toevoegen van het product
Controleer in de logs de regel checkValidity die op het aanmaken van de winkelwagenregel volgt. PrestaShop geeft daar precies aan waarom een regel wordt geweigerd (uitverkocht, klantbeperking, andere valuta, enzovoort).
De cadeaustip verschijnt niet op de winkelwagenregels
De module zoekt eerst de hook displayProductPriceBlock in cart-detailed-product-line.tpl, en dan displayCartExtraProductActions. De Classic-thema’s van PrestaShop 8 en 9 en de meeste commerciële thema’s bevatten minstens één van beide. Implementeert uw custom thema geen van beide, voeg dan een van deze regels toe in uw bestand cart-detailed-product-line.tpl, bij voorkeur de eerste in de productinfokolom:
{hook h='displayProductPriceBlock' product=$product type="unit_price"}
{hook h='displayCartExtraProductActions' product=$product}
De stip is afgekapt of toont alleen het icoon
Symptoom van de versies 2.1.0 en 2.1.1 op het Classic-thema, waar de stip in de actiekolom werd gerenderd, te smal voor tekst. Gecorrigeerd in 2.1.2 door de verplaatsing naar de productinfokolom. Werk de module bij.
Fout 500 bij het opslaan van een aanbieding
Vóór 2.2.0 werd een naam of badgetekst met =, ;, #, { of } door de PrestaShop-validators geweigerd en eindigde het opslaan in een witte pagina. Sinds 2.2.0 worden deze tekens geaccepteerd, en wordt elke werkelijk ongeldige waarde in het formulier gemeld in plaats van een fout te veroorzaken. Ziet u nog steeds een 500, raadpleeg dan Geavanceerde instellingen → Logs: de oorzaak wordt daar gelogd onder dfoffers save failed.
De productzoekfunctie van de back-office geeft niets terug na een migratie naar PrestaShop 9
Leeg de PrestaShop-cache en herlaad de aanmaakpagina van de aanbieding. De URL van het zoekendpoint wordt server-side gebouwd bij het renderen van het formulier; een vóór de migratie gecachte pagina kan nog een oude URL dragen. Blijft het probleem, open dan de browserconsole: een 404-antwoord op het zoekverzoek geeft aan dat het tabblad van de module niet correct is heraangemaakt, en een herinstallatie van de module corrigeert dat zonder de aanbiedingen te verliezen.
De installatie lijkt te slagen maar er kan geen enkele aanbieding worden aangemaakt
Vóór 2.0.0 was een mislukte tabelcreatie tijdens de installatie stil en toonde de module zich als geïnstalleerd. Sinds 2.0.0 laat deze situatie de installatie mislukken met een expliciete melding. Komt u dit geval op een oude versie tegen, controleer dan de rechten van de MySQL-gebruiker op tabelcreatie, en deïnstalleer en herinstalleer de module.
Veelgestelde vragen
Is de module compatibel met PrestaShop 9?
Ja, sinds versie 2.0.0. Hetzelfde ZIP-bestand installeert op PrestaShop 8.0 zowel als op PrestaShop 9.x. De API-verschillen worden geabsorbeerd door de interne klasse DfOfferCompat, er is dus geen aparte branch te kiezen bij het downloaden. De 1.x-versies bleven beperkt tot PrestaShop 8.0 tot 8.99.
Wat is de impact op de prestaties?
De engine voert één SQL-query per actieve aanbieding op de winkel uit en evalueert dan de voorwaarden in het geheugen. Op een catalogus met een tiental actieve aanbiedingen duurt de volledige evaluatie gemiddeld minder dan vijftig milliseconden. Dat cijfer is identiek op PrestaShop 8 en 9.
Kan ik de module met een headless thema gebruiken?
De automatische toevoegengine is themaonafhankelijk en werkt voor elke front die via Cart::updateQty of de PrestaShop REST API passeert. De banner op de productpagina en de cadeaustip in de winkelwagen zijn native Smarty-hooks die een klassiek thema nodig hebben om te verschijnen. Voor een headless front kunt u de gegevens blootstellen via een custom API die direct ps_dfoffers_offer en ps_dfoffers_cart_auto bevraagt.
Ondersteunt de module meerdere valuta’s?
Ja. De voor elke aanbieding gegenereerde winkelwagenregel gebruikt de valuta van de lopende winkelwagen. Wisselt de klant van valuta, dan wordt de regel bij de volgende actionCartSave tegen de correcte waarde geregenereerd.
Wat gebeurt er als ik op Resetten klik in het modulebeheer?
De module wordt gedeïnstalleerd en dan in hetzelfde verzoek herinstalleerd, wat de tabellen verwijdert en opnieuw aanmaakt: al uw aanbiedingen gaan verloren. Sinds 2.0.0 maakt deze operatie de tabellen correct opnieuw aan, terwijl eerdere versies de winkel helemaal zonder tabellen achterlieten. Maak in beide gevallen een back-up vóór het resetten.