Shopping Cart : Approche procédurale

, , Leave a comment

On trouve de nombreux exemples de code montrant la gestion d’un panier de e-commerce avec PHP.
Malheureusement ils sont – à mon avis – toujours un peu trop compliqué alors que le process est finalement très simple.
Il suffit d’avoir un tableau panier[] dont la clef associative est l’identifiant unique de l’article.
Reste le petit souci de la quantité. Celle-ci sera tout simplement associée à une clef associative secondaire : panier[$id][‘quantite’].
Voici ce que ça donne au niveau du code.
3 fichiers sont utilisés :
panier.php pour afficher le contenu du panier
panierfonctions.inc.php pour manipuler (CRUD) le contenu du panier.
parnierRemplir.inc.php juste pour remplir le panier avec des données

panier.php

<?php
// La structure de gestion du panier est très simple et très efficace :
// $panier[$id] contient un article (ce qu'on veut ; un objet, un tableau ...)
// En général cela correspond à un article issu de la base de données
//
// $panier[$id][qte] indique simplement la quantité

// Réalisation via approche procédurale dans un premier temps

// juste remplir le panier avec des données
include('panierRemplir.inc.php');

//Vérifions
var_dump($panier);
echo '<hr>';

// Pour test :
// l'article ayant pour id 11 voit sa quantité diminuée de 1
// si la quantité de l'article 11 est à zéro alors il est enlevé du panier
EnleverQte(11);

//Vérifions
var_dump($panier);

?>

panierFonctions.inc.php

<?php

function AjouterPanier($article, $id=null)
{
    global $panier;

    // si pas d'id fourni en argument on s'en occupe !
    if($id==null) $id = TrouveUnId($panier);


    if(!isset($panier[$id]))
            $panier[$id] = array( 'article' => $article, 'qte' =>1);
    else    $panier[$id]['qte']++;

    // nb : il faudrai tester si l'article est null ET l'id null
    // et aussi le cas ou l'article est null et l'id à la fois non null et n'existe pas dans le panier
}

function SupprimerPanier($id)
{
    global $panier;

    if(isset($panier[$id]))  
        unset($panier[$id]);
}

function EnleverQte($id)
{
    global $panier;

    if(!isset($panier[$id])) return;

    $panier[$id]['qte']--;
    if($panier[$id]['qte']<=0) unset($panier[$id]);
}

function ModifierArticlePanier($article, $id=null)
{
    global $panier;

    if(isset($panier[$id])) 
        $panier[$id]=$article;

}



function TrouveUnId($panier)
{
    // attention : array_key_last est très pratique mais nécessite PHP 7 >= 7.3.0 
    // return array_key_last($panier)+1;
    
    //Pour php5
    $id = end(array_keys($panier)) + 1;
    return $id;
}

?>

(puisque le site est « php8.fr » soulignons la non-utilisation – pour des raisons de compatibilité ascendante- de la fonction array_key_last ☺☺)

panierRemplir.inc.php

<?php
include('panierFonctions.inc.php');

$article['nom'] = 'Lampadaire vintage';
$article['prix'] = 8.90;
$article['photo'] = '../../lamp.jpg';
AjouterPanier($article);

$article['nom'] = 'Avion de luxe';
$article['prix'] =1000000;
$article['photo'] = '../../avionlux.jpg';
AjouterPanier($article);

$article['nom'] = 'Stylo bille';
$article['prix'] =0.5;
$article['photo'] = '../../stylo.jpg';
AjouterPanier($article,$id=10);

$article['nom'] = 'Casque audio';
$article['prix'] =20.70;
$article['photo'] = '../../kask.jpg';
AjouterPanier($article,$id=11);

// on aura un article en quantité 3
AjouterPanier(null,11);
AjouterPanier(null,11);

?>

Et c’est terminé ! Trop simple non ?
Evidemment il faudra mettre la variable $panier dans une session etc.

 

Leave a Reply