Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
bonjour ,
je suis débutante et je veux utiliser un panier pour stocker les article choisie pour les afficher après .
mais le panier utilise les session donc j'ai commencer à voir les session avec zend
dans mon fichier index bootsrtap j'ai creer une session
Zend_Session::start();
est il suffisant pour enregistrer le panier une fois s'il est creer dans ma session?? et comment je peux l'enregister dans ma session
merci de m'aider
Dernière modification par yosra (17-04-2008 15:39:03)
Hors ligne
l'inconvénient avec les paniers dans des sessions, c'est que si la session arrive a expiration, ou si la personne ferme son navigateur(ou autre) ton panier est perdu.
La meilleure solution pour faire des paniers, et soit de stocker le panier de ton client en BDD, soit de le stocker dans des cookies(là il peut aussi le supprimer, mais apres tout se sera sa faute cette fois )
sinon pour enregistrer une variable dans la session, c'est :
<?php Zend_Session::set('monPanier',$panier); ?>
Dernière modification par stf (15-04-2008 15:13:38)
Hors ligne
merci pour la réponse
je veux utiliser les panier juste pour afficher la liste des articles voulue par l'utilisateur est il possible de ne pas utiliser la session ?? s'il vous plais aidez moi je suis perdue dans cette opération .
Hors ligne
La meilleure solution pour faire des paniers, est soit de stocker le panier de ton client en BDD, soit de le stocker dans des cookies(là il peut aussi le supprimer, mais apres tout se sera sa faute cette fois tongue )
Tu as ta réponse
Hors ligne
Si tu veux pas te prendre la tête (ce qui à l'air d'être le cas ) tu peux faire un simple tableau que tu stock...
//Bootstrap require_once 'Zend/Session.php'; Zend_Session::start(); require_once 'Zend/Session/Namespace.php'; $cart = Zend_Session_Namespace('cart'); //Test panier if (isset($cart->products) && is_array($cart->products)) { //nouveau $cart->products = array(); } require_once 'Zend/Registry.php'; Zend_Registry::set('cart',new ); .... //Action de gestion du panier (ajout) if ($this->_hasParam('idTruc')) { $cart = Zend_Registry::get('cart'); $cart->products[$this->_getParam('idTruc')] = $this->_getParam('quantiteTruc',1); //Enregistrement auto :D } ... //Action d'affichage $cart = Zend_Registry::get('cart'); $prods = array(); foreach($cart->products as $idItem=>$Qte) { try { $prods[] = $this->model->Trucs->find($idItem)->current(); } catch (Exception $e) { /*Le truc existe pas donc rien a faire */} } $this->view->prods = $prods; ...
Voilà j'espère que ce snipet vous aidera
Hors ligne
merci pour le code Mr.MoOx c'est tres utile pour moi j'ai ajouter les ligne
Zend_Session::start(); //Test panier try { //existe deja $panier = Zend_Session::get('cart'); } catch (Exception $e) { //nouveau Zend_Session::set('cart',array()); }
mais s'il vous plais il y a cette erreur qui s'affiche
Fatal error: Call to undefined method Zend_Session::get() in D:\wamp\www\consultation2\applicationcss\index.php on line 40
j'ai fais le load de la classe session
Zend_Loader::loadClass('Zend_Session');
si j'ai compris la méthode get n'existe pas dans la classe session de zend ou quoi??
merci pour l'aide
Dernière modification par yosra (16-04-2008 22:14:52)
Hors ligne
Hu j'étais fatigué j'ai codé ça n'importe comment...
J'ai mis le code à jour
Du coup y'a la session, un namespace 'cart' et sa clé products qui est un tableau (idProduit=>quantité), et pour se trimballer ça partout dans l'appli, on met ça dans le registry!
Hors ligne
merci pour l'explication c gentil de ta part ton code m'aidera bcp
merci encore je travaille maintenant pour appliquer ce code
Hors ligne
bonjour , tout le monde
d'abord je veux remercier fortement ceux qui m'ont aidé j'ai réussit à faire ce que je veux
voici le code
dans le bootstrap j'ai pas besion de déclrer Zend_Session::start(); car j'utilise Zend_auth
se qui concerne le panier j'ai utiliser Zend_Session_Namespace pour enregistrer mon panier une fois creer
dans la classe panier
pour creer le panier
public function creerlistearticle() { $cart = new Zend_Session_Namespace('cart'); $ispanier=false; if (isset($cart->article) ) { $ispanier=true; } else { $this->panier=array(); $this->panier['article']=array(); $this->panier['description']=array(); $this->panier['qte']=array(); $cart->article=$this->panier['article']; $cart->description=$this->panier['description']; $cart->qte=$this->panier['qte']; Zend_Registry::set('cart',$cart ); $ispanier=true; } return $ispanier; }
pour ajouter dans le panier
public function ajouterarticle(&$article,&$qte,&$description) { $cart = new Zend_Session_Namespace('cart'); if( $this->creerlistearticle()) { array_push($cart->article,$article); array_push($cart->description,$description); array_push($cart->qte,$qte); } }
pour recuperer le nombres des enregistrement dans le panier
public function nbrenregistrement() { $nbr=0; $cart = new Zend_Session_Namespace('cart'); if( $this->creerlistearticle()) $nbr=count($cart->article); echo $nbr; return($nbr); }
dans mon controller
$categ = trim($this->_request->getParam('categ_select','')); $descrip=$_GET['description']; $qte=$_GET['qte']; $listearticles->ajouterarticle(&$categ,&$qte,&$descrip);//ajout $this->view->data=$listearticles->showCart();//retourner le panier $this->view->nbr=$listearticles->nbrenregistrement();//le nbr d'enregistrement
enfin j'ai ajouter dans le AuthController dans l'action logout
Zend_Auth::getInstance()->clearIdentity(); Zend_Session::destroy();//pour détruire la session pour que le panier soit vide à la prochaine ouverture $this->_redirect('/');
dans l'affichage view
if (!isset($this->nbr)|| ($this->nbr<= 0)) { echo "<tr><td>Votre panier est vide </ td></tr>"; } else { for ($i=0 ;$i < $this->nbr ; $i++) { echo "<tr>"; echo"<td>.<input type=\"text\" size=\"4\" name=\"i[]\" value=\"".htmlspecialchars($i+1)."\"/>.</ td>"; echo "<td>.<input type=\"text\" size=\"25\" name=\"article[]\" value=\"".htmlspecialchars($this->data->article[$i])."\"/>.</ td>"; echo "<td>.<input type=\"text\" size=\"25\" name=\"description[]\" value=\"".htmlspecialchars($this->data->description[$i])."\"/>.</ td>"; echo "<td>.<input type=\"text\" size=\"10\" name=\"qte[]\" value=\"".htmlspecialchars($this->data->qte[$i])."\"/>.</ td>"; } } ?>
enfin big merci à tous c'est grace à vous que j'ai pu faire ça mais une petite derniére question (j'espère ) à l'ouverture de la liste d'ajout au panier je trouve qu'elle m'affiche un enregistrement initial vide?? pourquoi??
merci de m'aider
Hors ligne
Pages: 1