Het bouwen van een winkel wagen
Hoi, ik ben momenteel bezig met het bouwen van een winkel wagen class. Dit lukt prima, met functies zoals addProduct, getTotalPrice, removeProduct etc. Nu is het vrij simpel om alle producten in de cart te laden en te printen in bijvoorbeeld een winkel wagen div.
Maar nu loop ik tegen het volgende aan. Ik bouw nu een winkel wagen class voor een sportschool. Het is geen web winkel waar je even alle producten onder elkaar print. Maar de opbouw moet zo zijn:
-Winkelwagen-
Abonnement:
- flex 19,95
Addons:
- sportwater 5,00
- online app 0,00
Zoals je ziet ziet het er niet ingewikkeld uit. Maar hoe categoreer ik het zodanig dat het juiste soort product onder het juiste kopje komt?
Ga er maar even vanuit dat een product een new Product() object is.
Maar nu loop ik tegen het volgende aan. Ik bouw nu een winkel wagen class voor een sportschool. Het is geen web winkel waar je even alle producten onder elkaar print. Maar de opbouw moet zo zijn:
-Winkelwagen-
Abonnement:
- flex 19,95
Addons:
- sportwater 5,00
- online app 0,00
Zoals je ziet ziet het er niet ingewikkeld uit. Maar hoe categoreer ik het zodanig dat het juiste soort product onder het juiste kopje komt?
Ga er maar even vanuit dat een product een new Product() object is.
>> Maar hoe categoreer categoriseer ik het zodanig dat het juiste soort product onder het juiste kopje komt?
Product flex 19,95 = categorie Abonnement
Product sportwater 5,00 = categorie Addons
Product online app 0,00 = categorie Addons
Het staat eigenlijk gewoon al in je vraag hè ;-)
Product flex 19,95 = categorie Abonnement
Product sportwater 5,00 = categorie Addons
Product online app 0,00 = categorie Addons
Het staat eigenlijk gewoon al in je vraag hè ;-)
Dus eigenlijk gewoon een extra property aan Product class toevoegen, waarin ik een categorie meegeef. En in JS waarmee ik de data ophaal, gewoon filteren en loopen aan de hand van de categorie?
Je vraagt hier naar een "best practice". Iets wat ik zelf ook wel eens doe. Je bent echter zelf een systeem aan het bouwen, dus 'hoe' je het invult is jouw keuze.
>> Dus eigenlijk gewoon een extra property aan Product class toevoegen, waarin ik een categorie meegeef.
Dat klinkt plausibel. OOP-technisch gezien weet ik niet of een categorie een property is. Het product behoort tot een categorie, maar of het dan ook een eigenschap is van het product weet ik niet. Een eigenschap is de kleur geel en de vorm rond. Ik weet niet of een abonnement een eigenschap (property) is. Wellicht druist dit in tegen de OOP-principes, maar daar mogen anderen hun oordeel over vellen :-)
>> En in JS waarmee ik de data ophaal, gewoon filteren en loopen aan de hand van de categorie?
Hoe je dat technisch doet, is aan jou. Ik vind het prettig om views in PHP op te bouwen. Als jij dat in dit geval via JS (ik vermoed AJAX) wil doen, waarschijnlijk vanwege een pop-up dan lijkt me daar niks mis mee.
>> Dus eigenlijk gewoon een extra property aan Product class toevoegen, waarin ik een categorie meegeef.
Dat klinkt plausibel. OOP-technisch gezien weet ik niet of een categorie een property is. Het product behoort tot een categorie, maar of het dan ook een eigenschap is van het product weet ik niet. Een eigenschap is de kleur geel en de vorm rond. Ik weet niet of een abonnement een eigenschap (property) is. Wellicht druist dit in tegen de OOP-principes, maar daar mogen anderen hun oordeel over vellen :-)
>> En in JS waarmee ik de data ophaal, gewoon filteren en loopen aan de hand van de categorie?
Hoe je dat technisch doet, is aan jou. Ik vind het prettig om views in PHP op te bouwen. Als jij dat in dit geval via JS (ik vermoed AJAX) wil doen, waarschijnlijk vanwege een pop-up dan lijkt me daar niks mis mee.
Ik bouw dit in een wordpress plugin, dus het makkelijkste voor het live updaten is ajax inderdaad. Verder is het niet een hele geadvanceerde winkelwagen, dus denk dat een property iets als product type, niet heel erg is en ook niet echt de OOP-principes overtreedt.
Maar bedankt voor je tips. Ik ga dat zeker meenemen in het verder ontwikkelen!
Maar bedankt voor je tips. Ik ga dat zeker meenemen in het verder ontwikkelen!
Ik zou (indien mogelijk) het wel als category proberen te implementeren, dus een categorie 'Abonnementen' en dat je die categorie bij het aanmaken/instellen van een product in de back-end kunt selecteren. Op die manier kun je ook mooi een categoriepagina maken met alle abonnementen of addons.
Heb je tips hoe ik dat zou kunnen toepasen, in wordpress bijvoorbeeld kan je taxonomies toepassen (categorie) en die aan een post type koppelen, maar mijn producten zijn geen wordpress items maar gewoon custom code.
Ik gebruik WordPress vrijwel nooit. Aangezien je custom code gebruikt, ben je vrij om te doen wat je wilt lijkt mij. Dus dan zou ik denken aan een 'category' tabel met (auto-increment) ID en name. En via een koppeltabel koppel je dan de producten en categorieën aan elkaar.
Ik gebruik geen database voor de producten, aangezien de producten uit een api komen. Misschien zou ik aan de hand van de api call of het nou om een addon of membership gaat uit 1 van die meegeleverde productenm een property kunnen uitlezen om het op de juiste plek in de winkel wagen te tonen
>> Ik gebruik geen database voor de producten, aangezien de producten uit een api komen
Wat bedoel je dan? Je hebt ze hardcoded in een bestand opgeslagen?
Wat bedoel je dan? Je hebt ze hardcoded in een bestand opgeslagen?
Nope, ik haal alles uit een api op. bijvoorbeeld met `/memberships` haal ik alle abonnementen op, met die informatie kan ik bijvoorbeeld een membership id, prijs etc pakken en die in de cart class gebruiken.
Toevoeging op 16/01/2023 09:03:43:
Toevoeging op 16/01/2023 09:03:43:
Jorn Reed op 16/01/2023 09:02:07:
Nope, ik haal alles uit een api op. bijvoorbeeld met `/memberships` haal ik alle abonnementen op, met die informatie kan ik bijvoorbeeld een membership id, prijs etc pakken en die in de cart class gebruiken.
Verder sla ik niets tijdelijk op, maar schiet ik alles bijvoorbeeld gelijk in. Op het moment dat de klant betaald via buckaroo. Dan pak ik de gegevens van de winkel wagen en schiet ik dan bijvoorbeeld pas het abonnement/addons in, die de klant heeft gekozen. Deze gegevens worden ook dus in de api opgeslagen en niet een db tabel of kladblok bestand.
Verder sla ik niets tijdelijk op, maar schiet ik alles bijvoorbeeld gelijk in. Op het moment dat de klant betaald via buckaroo. Dan pak ik de gegevens van de winkel wagen en schiet ik dan bijvoorbeeld pas het abonnement/addons in, die de klant heeft gekozen. Deze gegevens worden ook dus in de api opgeslagen en niet een db tabel of kladblok bestand.
Een API gebruikt ook een database ;-)
Maar ik vermoed dus dat je bij een externe partij via een API de producten ophaalt en de verkopen ook via die API registreert.
Maar om terug te komen op je vraag, dan zul je dus inderdaad aan de hand van de productkenmerken moeten vaststellen om wat voor product het gaat.
Maar ik vermoed dus dat je bij een externe partij via een API de producten ophaalt en de verkopen ook via die API registreert.
Maar om terug te komen op je vraag, dan zul je dus inderdaad aan de hand van de productkenmerken moeten vaststellen om wat voor product het gaat.
Op het moment dat ik bijvoorbeeld de memberships ophaal met de api, dan weet ik in de code dus dat ik de mmembership producten ophaal, aan de hand daarvan kan ik dat makkelijk dus bepalen. Zelfde geldt dan ook voor addons! :)
Ik neem aan dat je niet realtime de memberships vanuit de API ophaalt? Die kan je prima tussentijds opslaan in de database en via een cron updaten.
Nee dat doe ik helaas niet. Gewoon op het moment dat een gebruiker de pagina op komt. Worden de memberships inheladen via $client->getMemberships().
Vanuit een class die ik heb gemaakt voor de api calls.
Vanuit een class die ik heb gemaakt voor de api calls.
En wat als de API wegvalt? Zijn de memberships vaak hetzelfde? Of veranderen die vaak?
Als ze niet vaak veranderen kan je ze toch prima zelf cachen?
Als ze niet vaak veranderen kan je ze toch prima zelf cachen?
Jup cachen kan, maar als ik de membership niet kan ophalen omdat de api weg valt, dan zou ik ook niet een customer of nieuwe membership aan een customer kunnen toevoegen. Want dit is allemaal connectie met die api.
Gaat alles via de API dan? Kan je misschien wat meer context geven?
Gewijzigd op 17/01/2023 11:47:10 door - Ariën -
Ja alles gaat via de api. Ik sla zelf niks (ook niet tijdelijk) op. Als ik bijvoorbeeld memberships ophaal, gebruik ik bijvoorbeeld een specifiek membership id uit die call die ik weer mee-schiet met de customer details. En dat wordt dan weer bij die api opgeslagen.




