1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
| <?php
// *******************************************************
// Classe de panier basique utilisant les sessions
// Elle nécessite la classe Produit pour etre utilisée
// *******************************************************
// le constructeur : créé une session panier
// si elle n'existe pas encore
// le contenu pointe sur le tableau de la session
class Auto_Panier extends Panier {
function Auto_Panier() {
@session_start();
if (!isset($_SESSION['Panier']))
$_SESSION['Panier']=array();
$this->contenu = $_SESSION['Panier'];
}
}
// des constantes pour les messages d'erreur
define("ERR1","Le produit n'a pas été trouvé dans le panier.");
define("ERR2","Méthode de recherche inconnue");
class Panier {
// les propriétés du produit
// accessibles uniquement dans la classe
var $contenu;
var $total;
var $quantite;
var $poidstotal;
// ajoute un produit dans le panier
// ou juste une unité s'il existe déjà
function ajoute($produit) {
$pos = $this->getPosById($produit->getId());
if ($pos >= 0)
$this->contenu[$pos]->ajouteunite();
else
$this->contenu[] = $produit;
$this->actualise();
}
// supprime un produit du panier
function supprime($id) {
$pos = $this->getPosById($id);
if ($pos == -1)
echo ERR1;
array_splice($this->contenu,$pos,1);
$this->actualise();
}
// ajoute une unité d'un produit connaissant son id
function ajouteunite($idproduit) {
$pos = $this->getPosById($idproduit);
if ($pos == -1)
echo ERR1;
$this->contenu[$pos]->ajouteunite();
$this->actualise();
}
// supprime une unité d'un produit avec son id
function supprimeunite($idproduit) {
$pos = $this->getPosById($idproduit);
if ($pos == -1)
echo ERR1;
// s'il n'y a plus d'unité, on efface le produit
if (!$this->contenu[$pos]->supprimeunite())
$this->supprime($idproduit);
else $this->actualise();
}
// permet de rentrer le nombre d'unité(s) souhaitée(s)
function recalculer($nb) {
foreach ($nb as $idproduit => $unites) {
if (is_numeric($unites)) {
$pos = $this->getPosById($idproduit);
if ($pos == -1)
echo ERR1;
if ($unites == '0')
$this->supprime($idproduit);
else
$this->contenu[$pos]->majunite($unites);
}
}
$this->actualise();
}
// vide complètement le panier
function vide() {
$this->contenu = array();
$this->actualise();
}
// renvoie le contenu du panier à la position $pos
function getContenu($pos) {
return $this->contenu[$pos];
}
// renvoie le total HT du panier
function getTotal() {
return round($this->total,2);
}
// renvoie le total TTC du panier
function getTotalTTC() {
return round($this->total * 1.196,2);
}
// renvoie le poids total (2 chiffres après la virgule)
function getPoidsTotal() {
return round($this->poidstotal,2);
}
// renvoie la quantité de produits différents
// dans le panier
function getquantite() {
return $this->quantite;
}
// renvoie la position du produit avec son id
function getPosById($id) {
return $this->getPos('Id',$id);
}
// renvoie la position du produit avec son nom
function getPosByNom($nom) {
return $this->getPos('Nom',$nom);
}
// renvoie un produit avec un son id
function getproduitById($id) {
$pos = $this->getPos('Id',$id);
return $this->contenu[$pos]['produit'];
}
// renvoie un produit d'apres son nom
function getproduitByNom($nom) {
$pos = $this->getPos('Nom',$nom);
return $this->contenu[$pos]['produit'];
}
// appelle la méthode de la classe produit
// getId ou getNom pour parcourir le tableau
// contenu et renvoyer la position de ce produit
function getPos($by,$value) {
if (!in_array($by,array('Id','Nom')))
echo ERR2;
$pos = -1;
foreach ($this->contenu as $key => $produit)
if ($produit->{'get'.$by}() == $value)
$pos = $key;
return $pos;
}
// actualise le panier
function actualise() {
$this->total = 0;
$this->poidstotal = 0;
$this->quantite = 0;
foreach ($this->contenu as $produit) {
$qte = $produit->getquantite();
$this->total += $produit->getprixHT() * $qte;
$this->poidstotal += $produit->getPoids() * $qte;
$this->quantite += 1;
}
}
}
?> |
Partager