Bonjour à tous,
J'essaye d'adapter le tutoriel Créer un Panier PHP avec l'architecture MVC cependant je coince au moment il faut récupérer les id des produits de la session, en effet au lieu de m'afficher [0]=>int 1 [1]=>int 2 j'ai la même chose mais avec int[0]=>1,j'ai essayé de faire la fonction add() dans la classe Session mais quand je fais debug($_SESSION); j'ai toujours [0]=>1 et quand je fais un debug de $product par contre j'ai bien les deux produits
Voici le code qui est dans un controller Products (qui affiche mes produits sur chaque pages):
function panier(){
$this->loadModel('Product');
}
function addpanier(){
$this->loadModel('Product');
//$this->redirect('products/panier');
if(isset($_GET'id'])){
$product = $this->Product->find(array(
'id' => $_GET'id']));
if(empty($product)){
die("Ce produit n'existe pas !");
}
$panier = $this->Session->add($product[0]->id);
debug($_SESSION);
}else{
die("Vous n'avez pas sélectionné de produit à ajouter au panier.");
}
}
Et le code d'initialisation de la Session ainsi que la fonction add dans la classe Session:
public function __construct(){
if(!isset($_SESSION)){
session_start();
}
if(!isset($_SESSION'panier'])){
$_SESSION'panier'] = array();
}
}
public function add($product_id){
$_SESSION'panier']$product_id] = 1;
}
Si quelqu'un remarque une anomalie qu'il n'hésite pas à le faire signaler.
Edit: J'avais fait une erreur j'avais oublié de préciser que la condition était l'id qui correspond au $_GET'id'] ^^ .
Maintenant j'ai 1 => int 1
2 => int 1
3 => int 1 car j'ai 3 produits différents ajoutés comme vous le voyez il y a toujours un soucis au niveau de l'id qui est toujours définis à 1 mais je ne sais pas encore où j'imagine que le add est mal fait étant donné que la valeur est celle du add().
Edit n°2: En fait le code est bon maintenant tout fait exactement la même chose que Grafikart sauf que je n'arrive pas à voir comment faire le
<?php
$DB->query('SELECT * FROM products WHERE id IN ('.implode(',',$ids).')'); ?>
J'ai essayé de créer une fonction query qui faisait juste ça puis de l'appeller dans ma vue panier mais j'ai comme résultat 'null' au lieu d'avoir la liste des produits. Le find ne marche pas en effet il m'affiche bien la liste des produits mais si j'essaye de supprimer l'un d'entre eux, il est supprimé dans la Session et donc la variable $ids mais pas dans $products. Quelqu'un a une suggestion à faire ?
C'est bon c'est réglé finalement j'ai mis le tableau des clés et la requête SQL directement dans la vue panier plutôt que dans le controller de la vue. Et j'ai adapté selon mes envies, le panier fonctionne à merveille, j'ai fait un bouton + et - pour la quantité et lorsque l'on arrive à 0 je fais un unset() du produit comme ça pas de valeur négatives ;) .