Jouer avec le panier de Magento

Dans: Magento

2 mar 2010

Pour accéder aux produits se trouvant dans la panier, Magento propose une collection d’objet qui facilite l’accès aux informations.

  1. Récupérer le montant total du panier
  2. Récupérer le montant total HT du panier
  3. Récupérer le nombre d’articles différents du panier
  4. Récupérer le nombre d’articles au total du panier
  5. Parcourir tous les articles du panier
  6. Ajouter un article au panier
  7. Enlever un article du panier
  8. Ajouter un lien « Ajouter au panier »

Edit :

  • 06/07/10 : Récupérer le nombre d’articles au total du panier
  • 24/04/12 : Récupérer le montant total HT du panier

Etape 1 : Récupérer le montant total du panier

<?php
// Affiche le montant total du panier brut (Affiche : 20.0000)
<?php echo Mage::getSingleton('checkout/cart')->getQuote()->getGrandTotal() ?>
// Affiche le montant total du panier formaté (Affiche : 20,00€)
<?php echo $this->helper('checkout')->formatPrice(Mage::getSingleton('checkout/cart')->getQuote()->getGrandTotal()) ?>
?>

Etape 2 : Récupérer le montant total HT du panier

// Retournera 16.7224
public function getTotalExclTax()
{
    $total = 0;
    $quote = Mage::getModel('checkout/session')->getQuote();
    $address = $quote->getShippingAddress();
    if ($address) {
        $total = $address->getGrandTotal() - $address->getTaxAmount();
    }
    return max($total, 0);
}

Etape 3 : Récupérer le nombre d’articles différents du panier

<?php // Affiche le nombre d'articles différents du panier (Exemple : 4 cartes mémoires et 3 bouteilles de vin => 2)
echo Mage::helper('checkout/cart')->getCart()->getItemsCount();
?>

Etape 4 : Récupérer le nombre d’articles au total du panier

<?php // Affiche le nombre d'articles dans le panier (Exemple : 4 cartes mémoires et 3 bouteilles de vin => 7)
echo Mage::helper('checkout/cart')->getCart()->getItemsQty();
?>

Etape 5 : Parcourir tous les articles du panier

$_cart_products = Mage::getModel("checkout/cart")->getItems();
foreach($_cart_products as $_cart_product)
{
    // Traitement de chaque produit du panier
}

Etape 6 : Ajouter un article au panier

$id = Mage::getModel('catalog/product')->getIdBySku("product_sku");
$cart = Mage::getModel("checkout/cart");
$cart->addProductsByIds(array($id));
$cart->save();

Etape 7 : Enlever un article du panier

$cart = Mage::getModel("checkout/cart");
$id = Mage::getModel('catalog/product')->getIdBySku("product_sku");
$items = $cart->getItems();
foreach($items as $item)
{
    if($item->getProduct()->getId() == $id)
    {
        $itemId = $item->getItemId();
        $cart->removeItem($itemId)->save();
    }
}

Etape 8 – Ajouter un lien « Ajouter au panier »

<?php echo Mage::getUrl('checkout/cart/add', array('product' => $_product->entity_id,'qty' => 1)) ; ?>

[Etape 6 et 7 - Source : le très bon article de Stéphane Brun pour l'ajout/suppresion de produits dans le panier]
[Etape 2 - Source : le très bon article de Johann Reinke pour la récupération du montant total HT du panier]

32 Commentaires pour Jouer avec le panier de Magento

Avatar

David

avril 3rd, 2011 à 19 h 39 min

Bonjour.

J’aurais une colle :
comment ajouter des colonnes au panier ? PAr exemple, une colonne avec la remise du produit, une colonne avec le prix non remisé.

Avatar

Yohan

avril 5th, 2011 à 13 h 23 min

Bonjour David,

Pour ajouter des colonnes dans la table de votre panier, il faut aller dans le template situé à :
-> app/design/base (ou default suivant l’arborescence de votre site)/default/template/checkout/default.phtml

Il vous suffira de jouer avec l’html et d’appeler les attributs produits que vous souhaitez.

Avatar

Yohan

avril 5th, 2011 à 16 h 22 min

L’arborescence étant incomplète, voici une petite correction :
-> app/design/base/default/template/checkout/cart/item/default.phtml

Avatar

Frédéric Martinez

avril 6th, 2011 à 11 h 48 min

Plus précisément : app/design/{votre_interface}/{votre_theme}/template/checkout/cart/item/default.phtml pour la surcharge du core.

Ensuite il faut ajouter le titre de la colonne ainsi que son contenu dans default.phtml.

Tous les attributs de l’article ne sont pas chargés par défaut dans le listing panier.

Avatar

Chris

mai 12th, 2011 à 14 h 58 min

Bonjour,
Un simple lien vers le panier serait sous la forme checkout/cart ou echo $this->getUrl(), etc..

Avatar

steve

mai 16th, 2011 à 0 h 07 min

Bonjour,

Est-il possible de cacher l’onglet « panier » ou « comparer des produits » sur la page d’accueil s’il n’y a rien dessus ?

Merci,

(Magento v1.5.1)

Avatar

CCC

août 25th, 2011 à 13 h 08 min

Bonjour,
Je n’arrive pas à trouver comment modifier une quantité ? je cherche à augmenter une quantité déclenché par un attribut …
Peut on le faire sans modifier le core ?
Merci !

Avatar

Variables et conditions utiles sous Magento - Frédéric MARTINEZ - Freelance MAGENTO

décembre 13th, 2011 à 17 h 03 min

[...] Jouer avec le panier de Magento [...]

Avatar

Jordan

janvier 4th, 2012 à 17 h 57 min

Bonjour,

J’aimerai savoir la procédure à suivre pour afficher dans la panier :

« Il vous reste X jours(Heures) avant que votre panier ce vide »

Est-ce possible ? Comment faire ?

Merci beaucoup .

Avatar

Frédéric Martinez

janvier 4th, 2012 à 19 h 45 min

@steve : possible en layout XML avec des conditions. Cependant, il est plus aisé de supprimer les toplinks et de les recréer à la main avec un template personnalisé

@CCC : Il faut se cabler sur l’event juste avant que le produit s’ajoute au panier, et ainsi modifier la quantité

@Jordan : Je pense qu’il faudrait chercher du côté de la session du panier : getSingleton(‘checkout/session’) et le comparer à la durée de validité d’un panier en back-office (en jour par contre). Il doit aussi exister une extension pour gérer plus finement ce temps de panier. (Ex : Moulin Rouge > Panier qui se vide au bout de 20min)

Avatar

Jordan

janvier 4th, 2012 à 20 h 19 min

Ok merci, connaîtrais tu le nom de la session du panier par défaut par hasard ? :p

Avatar

Jordan

janvier 4th, 2012 à 20 h 19 min

du moins pour récupéré le temps

Avatar

Frédéric Martinez

janvier 4th, 2012 à 20 h 22 min

De tête non, mais je pense que checkout/session, ça doit être bon :)

Avatar

alexandre

février 3rd, 2012 à 19 h 50 min

Merci, c’est exactement ce dont j’avais besoin !

Avatar

funpro

mars 13th, 2012 à 20 h 09 min

bonjours
le code me renvoi tjrs 0 !!!

Avatar

Frédéric Martinez

mars 15th, 2012 à 17 h 25 min

@funpro Aïe coup dur.
Sérieusement, je vois pas comment vous aider avec si peu d’informations :D

Avatar

Ghassen Khemiri

mars 20th, 2012 à 16 h 20 min

Salut,
je trouve ces infos utiles mais j’ai un petit probleme.
Je viens d’installer un nouveau magento 1.5 ,les categories manuellement cree et j’ai inporte les produits de l’ancienne boutique vers ma nouvelle. Le probleme est que le bouton « ajouter au panier » n’apparait pas dans les produits configurables. Dans les produits simples elle apparait et sans aucun probleme. Merci d’avance sur l’informations ou l’aide.

Avatar

Frédéric Martinez

mars 20th, 2012 à 16 h 51 min

@Ghassen : Aucune idée.
Essayez de créer manuellement un produit configurable, si cela marche, alors votre import ne marche pas. Sinon, c’est un problème lié à votre thème ou Magento.
Si votre import ne marche pas, vos produits simples sont bien vendables (avec du stock, tout ça) ?

Avatar

tarek

mars 27th, 2012 à 17 h 29 min

Bonjour,
une petite question :)
je cherche a modifier le prix de « related-product » dans le panier ( pour le mettre a 1 € par exemple).
Mon problème est que dans l’event, je ne trouve pas le « related-product »
et même quand j’ai essayé de modifier le prix du produit principal

 $event->getProduct()->setPrice("1.0000")->setMinimalPrice("1.0000")->setFinalPrice("1.0000");

a la fin j’ai le prix de la base de donnée.
merci de m’éclairer

Avatar

Frédéric Martinez

mars 27th, 2012 à 17 h 42 min

@tarek : Il manque pas un save() ? Ne pas oublier de modifier le produit du panier et non le produit normal de la BDD.

Avatar

tarek

mars 27th, 2012 à 17 h 47 min

@fréféric
et ce que j’ai fait la, c’est pour le panier ou pour la base ? :s

Avatar

Frédéric Martinez

mars 27th, 2012 à 17 h 49 min

@tarek : comme dans l’exemple cela n’y était pas, c’était pour savoir.
Ensuite, c’est pour le panier exclusivement.

Je ne peux pas vous aider plus, à part vous dire d’attaquer le produit du panier, je n’ai pas les mains dedans actuellement ;)

Avatar

Magento – Variables et conditions utiles | Web Astuces - Tutos php, zend, magento, news, internet

avril 21st, 2012 à 16 h 36 min

[...] Jouer avec le panier de Magento [...]

Avatar

Ghassen Khemiri

juin 5th, 2012 à 12 h 14 min

Merci Frédéric pour la réponse,
Enfaite les produits simples sont vendables, seulement avec les produits configurables il n ya pas le boutton « ajouter au panier » je ne sais pas si c’est un problème de thème ou un conflit de javascript.
Le thème était en version 1.2 et j’ai immigrée pour la version 1.5 en gardant le même thème. peut être c ça le problème?

Avatar

Frédéric Martinez

juin 5th, 2012 à 13 h 03 min

@Grassen : Surement ! Déjà belle perf le 1.2 => 1.5 !

Avatar

yaya

juin 1st, 2013 à 6 h 46 min

bjr comment récupérer deux commande sur un même panier pour le mettre à la base données a chaque foi il me récupère seulement la dernière commande du panier

Avatar

Frédéric Martinez

juin 17th, 2013 à 15 h 05 min

@yaya : Normale, un panier est une quote, il n’y a qu’une quote en session du navigateur.
Pour avoir les 2 dernières commandes, il faut que la personne soit loggué pour aller chercher les quotes associées au compte.

Avatar

Vico

septembre 17th, 2013 à 9 h 26 min

Bonjour et merci pour ce partage. De mon côté ce code récupère le montant total du panier HT mais en incluant les frais de livraison (HT également).

Comment modifier ce code pour avoir uniquement le sous-total ?
Merci

Avatar

Vico

septembre 17th, 2013 à 9 h 30 min

Je parle bien sur du code « Etape 2″. Merci

Avatar

Xavier

octobre 24th, 2014 à 10 h 38 min

Bonjour

je souhaiterai changer  » ajouter au panier  » sur toutes les pages catégories ( et sous-cat ) par  » voir le produit  » :

je voudrais seulement  » ajouter au panier  » sur la fiche produit

comment faire ?
merci

Avatar

Frédéric Martinez

octobre 24th, 2014 à 10 h 51 min

@Xavier : Dans votre fichier app/design/frontend/{interface}/{theme}/template/catalog/product/list.phtml, il faut supprimer le bouton Ajouter au panier.

Là c’est du templating, cela ne correspond pas forcément cet article :)

Avatar

Arsene

février 29th, 2016 à 3 h 08 min

Bonjour a tous,

j’aimerais savoir comment créer un module qui propose des options d’assurance sur chaque produits du panier

Formulaire pour Commenter

Si vous en avez besoin, entourez votre code :

PHP : [php]echo $variable[/php]
XML : [xml]<default></default>[/xml]

Je m'appelle Frédéric Martinez.

Je suis Freelance Magento, fondateur de l'agence web e-commerce PH2M et anciennement étudiant en Master MIAGE à Toulouse.

Ce site présente mes réalisations professionnelles, personnelles et universitaires.

Magento Certified Developer Plus

rss_32 twitter_32 Magento

  • Vincent MARMIESSE: Bonjour, Attention depuis Magento 1.9.2.0, les blocs CMS sont en cache ! Cela ne pose pas de pro [...]
  • Java2dev: Bonjour, pour l'Etape 1 a quel niveau on met les codes? dans quel folder et c'est un fichier a edit [...]
  • manuel: Bonjour Frédéric, j'aimerais savoir comment enlever l'option de ( signature obligatoire ) de mon m [...]
  • Arsene: Bonjour a tous, j'aimerais savoir comment créer un module qui propose des options d'assurance su [...]
  • Frédéric Martinez: @Thomas : Il y aura toujours de la perte sur les personnes ne retournant pas sur la page de success. [...]