Ajouter automatiquement un produit cadeau au panier
- De Matthieu Vion le 29 septembre 2009
- Difficulté : 3/4
Cette extension permet d'ajouter automatiquement au panier un produit cadeau (gratuit) si le montant de la commande dépasse un certain seuil. L'ajout du cadeau peut être associé à un code promo.
L'extension (FreeGift) repose exclusivement sur l'utilisation des observers. Le produit cadeau est susceptible d'être ajouté ou supprimé lorsqu'une action engendre la modification du montant total de la commande :
- Ajout d'un produit au panier
- Suppression d'un produit
- Mise à jour des quantités
Certains événements ne sont pas implémentés par défaut dans Magento. Une surcharge du contrôleur est indispensable pour ajouter ces événements.
Le cadeau est un produit "classique" associé à aucune catégorie et dont le prix est nul. Il dispose d'une fiche visible sur le frontend mais ne peut être ajouté directement au panier. Le bouton "ajouter au panier" ne figure pas sur la fiche. La quantité du produit sur la page panier ne peut être modifiée.
Le client peut bénéficier du cadeau uniquement s'il saisit un coupon de réduction (optionnel). Le coupon doit exister dans les règles de prix panier.
Afin d'éviter tout problème, le produit est systématiquement supprimé lorsqu'une action se produit. Si le panier remplit toutes les conditions le cadeau est alors ajouté :
app/code/local/Magentix/FreeGift/Model/Observer.php
<?php
class Magentix_FreeGift_Model_Observer {
/* ... */
public function add_gift() {
if($this->_gift) {
/* Calcul du montant total du panier */
$this->getQuote()->collectTotals();
/* Suppression du cadeau s'il existe dans le panier */
$this->remove_item();
/* Ajout du cadeau si les conditions sont remplies */
if($this->getCartTotal() > $this->_amount && $this->getCoupon()) {
$this->_getCart()->addProductsByIds(array($this->_gift))->save();
}
}
}
public function remove_item() {
foreach ($this->getQuote()->getAllItems() as $item) {
if($item->getProductId() == $this->_gift) { $this->_getCart()->removeItem($item->getId())->save(); }
}
}
/* ... */
}
3 paramètres sont à renseigner depuis le menu configuration de l'administration (Système > Configuration > Ventes > Cadeau offert) :
- Le montant minimum de la commande pour bénéficier de l'offre
- L'ID du produit à ajouter
- Un coupon de réduction associé (optionnel)
Le module peut être modifié et amélioré ;)


En te remerciant!
Axel
SI tu connais une méthode pour rajouter ?
Mais bon boulot, quand même.
Bravo pour ce module, j'aimerais savoir si c'est possible d'ajouter plusieurs offres? Car je ne vois qu'un encart.
Merci d'avance.
Très beau module, j'aurai voulu savoir ce qu'il faut rentrer dans le champ "coupon", l'ID du coupon, le nom de la règle?
Je n'arrive pas à faire marcher cette partie pour le moment.
J'ai transféré les fichiers sur mon ftp, le menu cadeau offert apparait bien, mais lorqueje clique dessus, la page devient blanche. Cela peut venir d'ou? Est ce que ce module est compatible avec la version 1.3 de Magento?
Merci
Il faudrait visualiser dans les reports de Magento l'erreur générée (/var/report/)
Il n'y a pas d'erreur générée apparemment (rien dans le report).
Mais seul le bloc permettant de choisir le magasin d'application (en haut à gauche) apparait ainsi que le menu du haut.
le menu "configuration" disparait et la page de contenu est toute blanche...
Par contre, depuis que j'ai uploader les fichiers, ma page panier saute (page blanche) hormis le menu de droite qui me permet tout de même de voir le contenu de mon panier. L'article ajouté est bien ajouté mais pas l'article cadeau. Cela peut venir de quoi?
J'aime bien l'idée puisque je songais à ajouter un module semblable a mon site. Toutefois il manque me manquerais quelques fonctionalités tel ques:
- Possibilité d'ajoutés plusieur règles de cadeaux. (Par example, 5$, 10$, 20$, chacun avec leur cadeau respectif, avec choix à plus d'un cadeau au total)
- Possibilité d'ajoutés plus d'un produit si une règles est atteint qui serait selectionable par le client au frontend.
Si l'auteur ou un codeur php/magento est disponible, je serait prêt à faire une donation de quelques dollars pour obtenir ces fonctionalités.
Bon travail et merci de me contactez à l'addresse suivante si quelqu'un serait volontaire: ewinz87 (at) gmail (dot) com
Bonne journée à tous!
J'ai quasiment le même problème qu'elodie, quand je clique sur Système > Configuration > Ventes > Cadeau offert, je n'ai plus le menu de gauche (sauf le choix de ma vue Magasin) et j'a une page quasi blanche puisque j'ai "Accès refusé".
Pas d'erreur générée :/
elodie, comment as-tu corrigé ton soucis ?
Merci d'avance pour votre aide !
Je suis sur une version 1.3.
Pour répondre à Arnaud concernant le problème de Elodie, il suffit juste de se déconnecter et se reconnecter à l'admin pour que la page s'affiche.
Pourriez-vous m'expliquer comment faire pour installer ce module?
Merci
votre cadeau a été ajouté au panier.
Merci encore pour ce petit module.
Evidemment, il y a un petit mais... (désolé)
Le module fonctionnait nickel sur une 1.3.3, et puis j'ai upgradé sur une 1.4.1 et là, ô surprise, le cadeau n'apparaît qu'une fois sur deux lors de l'ajout de produits au panier !
En clair, premier ajout au panier de x exemplaires de l'article P, il apparaît...
Ajout de y exemplaires de l'article Q, il n'apparaît plus ! Mais il réapparaît alors si on force la mise à jour du panier.
Ajout de z exemplaires de l'article R, il apparaît...
Et ainsi de suite...
Je vais essayer de trouver là où ça coince, mais ça risque d'être coton si c'est une question d'événement système !
Encore merci en tout cas pour ce module indispensable !
Juste un bug sous Magento 1.5.0.1 lorsque q'un code promo est ajouté le cadeau disparaît du panier automatiquement !!! :-(
public function add_gift() {
if($this->_gift) {
$this->getQuote()->collectTotals();
$this->remove_item();
if($this->getCartTotal() > $this->_amount ) {
$this->_getCart()->addProductsByIds(array($this->_gift))->save();
}
$this->getQuote()->collectTotals();
}
}
une petite question a vous posé s'il vous plais.
pour le panier de Magento si par exemple:
pour l'achat d'un téléphone j'offre un kit gratuit ou a 1 € (un prix que j'ai forcé dans l'Observer).
par la suite le client veut remettre un autre kit (sans le téléphone) dans le panier, donc avec son vrai prix.
au final je trouve les deux kit au même prix (original/forcé) tout dépend du quel j'ai mis en dernier.
y a t il un moyen de mettre deux fois un produit dans le panier mais en donnant a chacun un prix différent .
Merci
Merci
Est-ce que ce module est compatible avec la version 1.7 ?