Bonjour,
je travaille sur Symfony2.7 un projet e-commerce, dans la partie détails d'un produit j'ai récupérer tout les données liées à cette article
avec une liste des couleurs et une liste des tailles disponibles d'un article (chaque liste dans un select) .
mon problème est de :
les données de l'article sont dans panier,
donc c'est au moment du choix de l'utilisateur la couleur et la taille je dois ajouter son choix dans panier pour le récupérer apres nn ?
pour etre plus pratique voici la démarche que je suis :
ProduitsType
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('nom')
->add('description')
->add('marque', 'text', array('required' => false))
->add('prix')
->add('disponible')
->add('qte')
->add('categorie')
->add('couleur', 'collection', array('type' => new CouleurType(), 'allow_add' => true, 'label' => false, 'required' => false, 'by_reference' => false))
->add('taille', 'collection', array('type' => new TailleType(), 'allow_add' => true, 'label' => false, 'required' => false, 'by_reference' => false))
->add('imga', 'file', array('data_class' => null))
->add('image', 'collection', array('type' => new ImageType(), 'allow_add' => true, 'label' => false, 'required' => false, 'by_reference' => false))
;
}
Controleur du détails de l'article :
public function detailsAction($id)
{
$em = $this->getDoctrine()->getManager();
$produit = $em->getRepository('EcommerceEcommerceBundle:Produits')->find($id);
if (!$produit) throw $this->createNotFoundException('La page n\'existe pas.');
return $this->render('EcommerceEcommerceBundle:Default:details.html.twig', array('produit' => $produit));
}
puis je récupère les details de l'article dans mon fichier details.html.twig :
<div class="product-information">
<!--/product-information-->
<h2>{{ produit.nom }}</h2>
<p>{{ produit.categorie.nomcat }}</p>
<p>{{ produit.description }}</p>
<span>
<span>€ {{ produit.prix}}</span>
</span>
<p>
<b>Couleur :</b>
<select id="co" >
{% for coul in produit.couleur %}
<option value="{{ coul.nomc }}">{{ coul.nomc }}</option>
{% endfor %}
</select>
</p>
<p>
<b>Taille :</b>
<select id="ta" >
{% for ta in produit.taille %}
<option value="{{ ta.tai }}">{{ ta.tai }}</option>
{% endfor %}
</select>
</p>
<p><b>Marque :</b> {{ produit.marque}}</p>
<p>
<a href="{{ path('ajouter', { 'id' : produit.id,'mar' : produit.marque }) }}">
<button type="button" class="btn btn-fefault cart" >
<i class="fa fa-shopping-cart"></i>
Ajouter au Panier
</button>
</a>
</p>
</div><!--/product-information-->
Et pour ajouter au panier voici le controleur de l'ajout :
public function ajouterAction($id)
{
$session = $this->getRequest()->getSession();
if (!$session->has('panier')) $session->set('panier',array());
$panier = $session->get('panier');
if (array_key_exists($id, $panier)) {
if ($this->getRequest()->query->get('qte') != null) $panier[$id] = $this->getRequest()->query->get('qte');
$this->get('session')->getFlashBag()->add('success','Quantité modifié avec succès');
} else {
if ($this->getRequest()->query->get('qte') != null)
$panier[$id] = $this->getRequest()->query->get('qte');
else
$panier[$id] = 1;
$this->get('session')->getFlashBag()->add('success','Article ajouté avec succès');
}
$session->set('panier',$panier);
return $this->redirect($this->generateUrl('panier'));
}
Contoleur panier
public function panierAction()
{
$session = $this->getRequest()->getSession();
if (!$session->has('panier')) $session->set('panier', array());
$em = $this->getDoctrine()->getManager();
$produits = $em->getRepository('EcommerceEcommerceBundle:Produits')->findArray(array_keys($session->get('panier')));
return $this->render('EcommerceEcommerceBundle:panier:panier.html.twig', array('produits' => $produits, 'panier' => $session->get('panier')));
}
et je récupére le contenu du panier dans panier.html.twig
{% for produit in produits %}
<tr>
<form action="{{ path('ajouter', { 'id' : produit.id }) }}" method="get">
<td class="cart_product">
<a href=""><img src="{{asset('upload/produits/' ~ produit.id ~'/' ~ produit.imga)}}" alt="" width="110" height="110" ></a>
</td>
<td class="cart_description">
<h4>{{ produit.nom }}</h4>
</td>
<td class="cart_price">
<p>{{ produit.prix }} €</p>
</td>
<td>
<select name="qte" class="span1" onChange="this.form.submit()">
{% for i in 1..20 %}
<option value="{{ i }}" {% if i == panier[produit.id] %} selected="selected" {% endif %}>{{ i }}</option>
{% endfor %}
</select>
</td>
<td class="cart_total">
<p class="cart_total_price">{{ produit.prix * panier[produit.id] }}€</p>
</td>
<td class="cart_delete">
<a class="cart_quantity_delete" href="{{ path('supprimer', { 'id' : produit.id }) }}"><i class="fa fa-times"></i></a>
</td>
</form>
</tr>
{% set totalTTC = totalTTC + (produit.prix * panier[produit.id]) %}
{% endfor %}
Merci pour vos aides