Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Autres composants
Autres composants Forum de support sur les autres composants de Zend Framework.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/09/2011, 20h53   #1
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 78
Points : 78
Par défaut comment modifier à l'intérieur d'une session ?

Bonsoir, je souhaite réaliser un panier basique voici un début de script
Code :
1
2
3
4
 
         $session = new Zend_Session_Namespace('identite');
         $session->panier=array('id'=>'14','quantite'=>'5','fruit'=>'pommme');
         $this->view->panier=$session->panier;
je vais supposer que le panier contien 5 pommes
maintenant j'ajoute dans mon controleur une nouvelle action
Code :
1
2
3
4
5
 
    ajouterAction($id,$quantite)
    {
       //ajouter dans le panier
    }
Dans cette situation comment je fait pour ajouter un nouveau fruit ?
1-je décompose toute la session , je récupère l'id produit et la quantite, je fait un +n dans la quantite , je supprime la session et je réaliser une autre session qui contiendra les nouvelles donnée?

2-je cherche dans la session si ce produit a été commender et dans ce cas j'en ajoute directement dans la session .

Ici je ne sais pas comment m'y prendre pour le faire.


merci d'avance de me quider pas à pas la réalisation d'un panier
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 22h15   #2
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
Premièrement à moins que tu veuilles vraiment avoir un tableau index de 0 à ton nombre de panier, tu devrais remplacer :

Code :
$session->panier=array('id'=>'14','quantite'=>'5','fruit'=>'pommme');
par
Code :
$session->panier[14]=array('pomme'=>'5','abricot'=>'6');
Si tu regarde cela te permet de pouvoir stocker plusieurs fruit plus facilement dans un panier( ton panier contient plusieurs tableau correspondant) et c'est plus simple pour associer une quantité à un fruit.

ensuite pour ajouter dans ta méthode tu fait quelque chose du genre
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
public function ajouter($id, $fruit, $quantite){
foreach($session->panier as $idPanier => $elements){
     if($idPanier == $id){
          if(isset($elements[$fruit])){
               $session->panier[$id][$fruit] = $elements[$fruit] + $quantite;
          } else {
               $session->panier[$id][$fruit] = $quantite;
          }
     }
}
}
Je ne dis pas que ça marche je viens de te le faire sans tester vite fait, mais c'est dans ce genre d'idée
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 23h34   #3
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 78
Points : 78
merci de ta réponse , c'est exactement cela que je veux faire , je vais essayer ton script

j'aurais une autre question
donc voici un formulaire qui se compose d'un liste déroulante
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
 
    private $fruit =array(
        '1' => 'peche',
        '2' => 'pomme',
        '3' => 'poire',
        '4' => 'abricot',);
 
 
 
    public function init() {
        $this->recup_fruit();//on va recherche la table fruit pour la liste déroulante
        $element = new Zend_Form_Element_Select('fruit', array(
        'multiOptions' =>$this->fruit)) ;
        $this->addElements(array($element));
ici c'est pas trop difficile a faire car c'est codé en dure,maintenant j'aimerais charger cette liste à travers une base de donnée , ça sera plus dynamique, car si on nouveau fruit est crée il faudra l'enregistrer dans la table.

je rencontre déjà un problème:

ma table fruit contient 3 champs
id_fruit
fruit
prix

si je récupère toute ma liste avec mon modèle
Code :
1
2
3
4
5
6
7
8
9
10
 
   public function lister()
   {
        $db = Zend_Db_Table::getDefaultAdapter();
        $sql="SELECT * FROM fruit";
        $resultat = $db->fetchAll($sql);
      //  Zend_Debug::dump($resultat);
        return $resultat;
 
   }
je me retrouve avec un table comme ceci
Code :
1
2
3
4
5
6
 
array
  [0]=>array(3)
    ['id_fruit] ='1'
    ['fuit']='peche'
    ['prix']='1'
faut t'il que je transforme cette array ? si oui quel est la bonne façon de faire ?
Code :
1
2
 
$fruit = array('id_fruit','fruit');
si je fait ceci , je serai obliger de retrouver le prix du fruit, donc je pense que je devrais rechercher dans ma table uniquement un select dans id_fruit et fruit

peut être qu'il y a un autre moyen plus malin ?
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 07h37   #4
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
En effet tu n as besoin que de l id et du fruit.
Il faut que tu construise toi même un tableau associatif associant l id au fruit

Tu peux optimiser mon bout de code pour ne pas avoir de foreach mais un if
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 08h27   #5
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
Code :
1
2
3
4
5
6
7
8
9
10
11
 
 
public function ajouter($id, $fruit, $quantite){
     if(isset($session->panier[$id])){
          if(isset($session->panier[$id][$fruit])){
               $session->panier[$id][$fruit] = $session->panier[$id][$fruit] + $quantite;
          } else {
               $session->panier[$id][$fruit] = $quantite;
          }
     }
}
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 11h42   #6
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 78
Points : 78
j'ai résussi a charger les multioptions en faisant ceci
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
    public function recup_option()
    {
        $liste= new Application_Model_DbTable_Fruit();
        $resultat =$liste->lister();
        //on charge la liste des pretations
         $out = array();
         for($i=0;$i<4;$i++)
         {
             $id=$resultat[$i]['id_fruit'];
             $nom=$resultat[$i]['nom_fruit'];
             $out[$id]=$nom;
         }
         $this->prestation = $out;
    }
par contre je n'ai plus le nom du fruit pour la charger dans le panier ?

Code :
1
2
3
4
5
6
 
   private $fruit =array(
        '1' => 'peche',
        '2' => 'pomme',
        '3' => 'poire',
        '4' => 'abricot',);
quand fait un $this->getRequet()->getPost();
je n'ai que les résultat que j'ai selectionner, soit un soit deux soit 3...

il y a t'il un moyenne de récupérer aussi le nom que j'ai seletionner et pas seulement l'id ?

sinon je suis oblité de prendre l'id que j'ai sélectionner et de rechercher encore une fois a quoi correspond le nom du fruit de cette id ?
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 15h51   #7
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 78
Points : 78
j'ai pu me débrouiller, j'ai charger les noms des fruits en utilisant la class form et en récupérant l'attribut qui contient toutes les noms.

est ce que le principe de chargement du panier ce fait comme ceci?

Code :
1
2
3
4
 
        $session->panier['id'][]='1';
        $session->panier['id']['fruit']="promme";
        $session->panier['id']['quantite']='12';
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 16h23   #8
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
ton code signifie que $session->panier est un tableau et que tu modifie la valeur de id.

Si tu veux plusieurs avoir un tableau pour $session->panier['id'], fait :
Code :
1
2
3
4
5
6
7
8
 
 
 
        $session->panier['id'][]="1";
        $session->panier['id'][]="2";
        $session->panier['id'][]="3";
 
        Zend_Debug::dump($session->panier['id']);
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 16h49   #9
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 78
Points : 78
merci j'avais oublier les crochets
maintenant j'ai fait un test simple le premier isset que tu a marqué

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
        if(isset($session->panier[$id]))
        {
            echo "article existe déjà";
         Zend_Debug::dump($session->panier);
        }
        else
        {
            echo "nouveau article ajouter";
            $session->panier['id'][]=$id;
 
        }
                  Zend_Debug::dump($session->panier['id']);
je ne comprend, a chaque fois que je transmet le même $id, la session augment d'un autre id,j'ai toujours "article ajouter"
Code :
1
2
3
4
5
6
7
8
9
10
 
array(7) {
  [0] => string(1) "1"
  [1] => string(1) "1"
  [2] => string(1) "1"
  [3] => string(1) "1"
  [4] => string(1) "2"
  [5] => string(1) "1"
  [6] => string(1) "1"
}
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 16h59   #10
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
Tu t'embrouille complètement et tu m'embrouille par la même occasion, il faudrait que tu fasses le point sur ce que tu veux exactement et sur ceux à quoi correspond chaque élément un exemple serait d'ailleurs plus parlant.

Car dans mes codes je considérais que tu avais plusieurs paniers et non pas un seul tandis que toi, il semblerait que tu ne veuilles qu'un seul panier et dans ce cas là il ne faut pas faire :
Code :
$session->panier['id'][]=$id;
mais :
Code :
array_push($session->panier, $id);
Cela te permet d'ajouter un $id à ton panier
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 17h38   #11
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 78
Points : 78
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
 
AJOUTER UNE COMMANDE // ajoutre une ligne de commande en plus (sur une autre page)
 
--------------------------------commande de fruit-------------------
 
NOMBRE DE FRUIT           selctionner le fruit qu'il vous faut
 
|-------------------|                   |selection de fruit|       //ici c'est la liste déroulante
|-------------------|  
 
 
--------------------------PANIER---------------------------------
 
nom du produit---------quantite----------prix---------total
 
pomme--------------------2-----------------1,5-----------3----------------modifier----------supprimer
peche---------------------10----------------2.7--------------27------------modifier----------supprimer
-------------------------------------------------------------------------
total:  30  euros
est plus claire de ce que je souhaite faire ? il y a peut être plus simple ?
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 18h07   #12
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
Je considère que tes produits sont dans une table avec un libellé un id et un prix:
Code :
1
2
3
4
5
6
7
 
public function ajouterAction($id,$quantite){
if(isset($session->panier[$id]))
     $session->panier[$id] = $session->panier[$id]+$quantite;
else
     $session->panier[$id] = $quantite;
}
du coup tu aura l'id de ton produit associé à une quantité et c'est tout ce que tu as besoin de stocker, le reste sera calculé avec la table contenant tes produits
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/09/2011, 19h31   #13
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 78
Points : 78
je n'arrive pas rentrer dans la condtion d'existance

Code :
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
 
 
        if ($this->getRequest()->isPost()) {
            //recupération de la saisie
            $formData = $this->getRequest()->getPost();
            Zend_Debug::dump($formData);
            $id_presta = $formData['liste']; //on récupère l'id 
 
            $fruit = $this->findnom($id_fruit); //le nom
            $id = $formData['liste']; //id 
            $quantite = $formData['quantite']; //quantite rentrer
 
            $this->ajouterAction($id, $quantite);
        }
 
    public function ajouterAction($id, $quantite) {
     $session = new Zend_Session_Namespace('commande');
        echo $id; //affiche bien l'id
        echo "<br/>";
 
    if(isset($session->panier[$id]))
    {
        echo "<h1>existe<h1>";
    }
     else
     {
         $session = new Zend_Session_Namespace('commande');
         $session->panier=array();
         array_push($session->panier,$id);
         echo "existe pas;";//affiche tous le temps existe pas
     }
            Zend_Debug::dump($session->panier);
      }
ici c'est bien l'array push que je dois utiliser ?
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 21h42   #14
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
Tu n y mets pas du tiens.
Respecte ce que je te mets, car la tu tente d initialiser ton panier en array() du coup tu le vide a chaque fois je ne mets pas ça dans mon code
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 22h19   #15
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 78
Points : 78


Ah.. décidément j'ai vraiment du mal avec les tableaux associatifs

même avec un écran de 27 pouce je n'ai pas bien regarder ce que tu avais mis

Code :
1
2
  $session->panier[$id] = $quantite;
merci de me l'avoir fait rechercher, je suis bigleux..
donc maintenant cela fonctionne

merci encore
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h06.


 
 
 
 
Partenaires

Hébergement Web