OO Webwinkel
Ik ben een webwinkel aan het maken in OOP.
Ik doe nu alle producten die worden uitgekozen opslaan in een sessie, alsof ze in een soort winkelkar zitten.
Maar als ik de sessie cookies van mijn browser wis, dan is natuurlijk de winkelkar leeg.
En daarbij krijg je dit soort codes:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
session_start();
class Cart {
private $_products;
public function __construct() {
$this->_products = $_SESSION['cart'];
$this->_products['cart'] = array();
}
public function addItem($id, $name, $price, $amt) {
// Vooral dit soort regels vind ik lelijk
$this->_products['cart'][] = array($id, $name, $price, $amt);
}
}
?>
session_start();
class Cart {
private $_products;
public function __construct() {
$this->_products = $_SESSION['cart'];
$this->_products['cart'] = array();
}
public function addItem($id, $name, $price, $amt) {
// Vooral dit soort regels vind ik lelijk
$this->_products['cart'][] = array($id, $name, $price, $amt);
}
}
?>
Zo krijg ik de neiging om steeds met multidemensionale-sessie-array's te gaan werken.
Is dit oke zo? Of zouden jullie het helemaal anders doen, bijvoorbeeld met een database tabel waarin je tijdelijk de gekozen producten in opslaat van elke bezoeker, met een tijdelijk ID dat je in een sessie opslaat.
Ik heb hier nu (nog) niet voor gekozen omdat ik dacht dat te veel query's niet goed waren, maar volgens mij maakt het veel minder uit dan ik denk.
Maar anders.. nope.
dan in OOP (hoe ver wil je gaan) zou ik een Session class nemen die de zorgen van het opslaan en lezen met sessions voor zijn rekening gaat nemen. Met serialize http://php.net/manual/en/function.serialize.php kun je objecten ook opslaan in sessions. Ik gebruik echter zelf gewoon een getter en setter en buiten mijn class roep ik dan gewoon $session->setValue('products', $productsArray);
Vraag me af of er mensen zijn die serialize gebruiken met sessies?
Je zou serialize kunnen gebruiken, maar dan heb je nog steeds minimaal één query nodig om de inhoud van het winkelwagentje aan te passen aan actuele prijzen en actuele voorraden.
Frank, ik zou het ook met serialize aanpakken. Iets als:
Wouter J op 03/11/2013 14:53:14:
Nee hoor, dat is heel normaal :)Ward, vaak stop ik pas iets in mijn winkelwagentje nadat ik weet waar ik het wil kopen. Is dat apart?
Maar je ziet ook dat kopers bijvoorbeeld iets in het winkelwagentje doen om te achterhalen wat de bijkomende verzendkosten zijn. Lekker makkelijk hè, hoeven ze dat niet zelf op te zoeken... Zoveel mensen, zoveel wensen.
[hint]Bij die blauwe bolle krijg je vaak korting als je, met account, iets in het winkelwagentje doet en de bestelling niet afrondt. Met extra korting probeert hij je een paar dagen later per e-mail alsnog over de streep te trekken.[/hint]