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 nombre d’articles différents du panier
  3. Récupérer le nombre d’articles au total du panier
  4. Parcourir tous les articles du panier
  5. Ajouter un article au panier
  6. Enlever un article du panier
  7. Ajouter un lien « Ajouter au panier »

Edit :

  • 06/07/10 : Récupérer le nombre d’articles au total 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 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 3 : 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 4 : 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 5 : 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 6 : 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 7 – Ajouter un lien « Ajouter au panier »

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

[Etape 5 et 6 - Source : le très bon article de Stéphane Brun pour l'ajout/suppresion de produits dans le panier ]

  1. Récupérer le nombre d’articles différents du le panier

14 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 !

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 et anciennement étudiant en Master MIAGE à Toulouse.

Ce site présente mon CV ainsi que mes réalisations professionnelles, personnelles et universitaires.

rss_32 twitter_32 Magento

  • alexandre: Merci, c'est exactement ce dont j'avais besoin ! [...]
  • Frédéric Martinez: De base, non ce n'est pas possible. Cependant, cela doit se jouer dans les configurations JS de cal [...]
  • Peter: le tuto est génial, il est tres utile pour les débutants comme moi. Mais j'ai une petite que [...]
  • Frédéric Martinez: @martin : Non cela ne marche pas avec un Magento 1.6.2.0 par exemple car la table sales_order n'exis [...]
  • martin: Bonjour, ce code marche -t-il toujours sur les nouvelles version de magento ? merci [...]