OO Webwinkel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan terhuijzen

jan terhuijzen

03/11/2013 12:15:35
Quote Anchor link
Hallo,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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);
    }
}

?>

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.
 
PHP hulp

PHP hulp

27/11/2024 21:48:37
 
Frank Nietbelangrijk

Frank Nietbelangrijk

03/11/2013 13:49:45
Quote Anchor link
Als het puur om de artikelen van de winkelwagen gaat dan zou ik die niet in de database opslaan tenzij je de klanten later (een dag, week of maand of zo) nog de gelegenheid wilt geven om hun hun winkelwagen weer te raadplegen en verder aan te vullen. Bij grote websites als conrad kan ik me voorstellen dat mensen een lijstje willen maken en deze aanvullen totdat het voldoende is om geen verzendkosten meer te betalen.

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?
 
Ward van der Put
Moderator

Ward van der Put

03/11/2013 14:00:38
Quote Anchor link
Je ziet dat mensen die graag eerst prijzen vergelijken, technische specificaties uitspitten, reviews lezen, enzovoort vaak over een periode van meerdere dagen terugkeren voordat ze tot een definitieve aanschaf overgaan. Daarom kan het geen kwaad winkelwagentjes tot zo'n 90 dagen in leven te houden.

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.
 
Wouter J

Wouter J

03/11/2013 14:53:14
Quote Anchor link
Ward, vaak stop ik pas iets in mijn winkelwagentje nadat ik weet waar ik het wil kopen. Is dat apart?

Frank, ik zou het ook met serialize aanpakken. Iets als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
class Cart implements \Serializable
{
    private $products = array();

    public function addProduct(Product $product)
    {

        $products[] = $product;
    }


    public function serialize()
    {

        return serialize($products);
    }
}
 
Ward van der Put
Moderator

Ward van der Put

03/11/2013 15:03:50
Quote Anchor link
Wouter J op 03/11/2013 14:53:14:
Ward, vaak stop ik pas iets in mijn winkelwagentje nadat ik weet waar ik het wil kopen. Is dat apart?
Nee hoor, dat is heel normaal :)

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]
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.