Chris2008 Posted May 19, 2009 Share Posted May 19, 2009 Salut à tous,Est Il possible de vérifier lors de la validation de commande que les quantité soit un multiple de 6 ???(car expédition uniquement par carton de 6)Comme par exemple un minimum d'achat possible,Prestashop renvoie une erreur à l'acheteur de type "01. Erreur vous devez acheter pour 60€ minimum"lorsque c'est paramétré dans les préférences de l'admin.Pensez vous que ceci est faisable ??,Merci d'avance pour vos réponsesChris2008 Link to comment Share on other sites More sharing options...
Julien Breux Posted May 19, 2009 Share Posted May 19, 2009 Mon avis perso, si tu veux vendre par cartons de 6.Pourquoi ne vends-tu pas 1 carton (de 6 unité) ? Link to comment Share on other sites More sharing options...
ningu Posted May 20, 2009 Share Posted May 20, 2009 Sur le même sujetwww.prestashop.com/forums/viewthread/7596/Mais je n’ai jamais eu de retour aux remarques que j’avais faites (panier rempli par groupe de 6 bouteilles et mis à jour par 1 bouteille)Donc idem que Julien, pourquoi ne pas vendre des cartons plutôt que des unités ? Link to comment Share on other sites More sharing options...
Julien Breux Posted May 20, 2009 Share Posted May 20, 2009 Je dit ça simplement parce que c'est tout simple et souvent, on cherche le "bien compliqué".Bonne recherche Link to comment Share on other sites More sharing options...
kriboy Posted May 20, 2009 Share Posted May 20, 2009 C'est peut être parce que ce ne sont pas des produits identiques donc avec un prix différent mais qu'il souhaite n'expédie que par 6 produits, donc impossibilité de faire 1 groupe de produits.J'imagine que cela concerne peut être du vin et qu'il souhaite que ses clients fassent une composition mais uniquement en multiple de 6. Link to comment Share on other sites More sharing options...
Chris2008 Posted May 20, 2009 Author Share Posted May 20, 2009 C'est peut être parce que ce ne sont pas des produits identiques donc avec un prix différent mais qu'il souhaite n'expédie que par 6 produits, donc impossibilité de faire 1 groupe de produits.J'imagine que cela concerne peut être du vin et qu'il souhaite que ses clients fassent une composition mais uniquement en multiple de 6. Bonjour à tous,Voilà exactement c'est bien du vin, et il y a la possibilité de panacher le contenu du carton si je vendais directement les cartons ça m'arrangerait mais je n'aurai pas la possibilité de panacher A moins de proposer des cartons deja panachés (en imposant le contenu et non pas en le composant)si ce cas s'avère possible comment faire pour vendre par carton sachant ??voici l'url : http://boutique.sol-payre.com/ Merci pour vos réponsesen espérant avancer car je vois que pas mal de personne ont ce souci Link to comment Share on other sites More sharing options...
ningu Posted May 20, 2009 Share Posted May 20, 2009 Chris,N'expédier que des cartons complets, en permettant de panacher les bouteilles est meilleur pour les papilles.Sur ton site, en plus du nombre de boutilles minimum, tu devrais aussi préciser que tu n'expédies que des cartons complets.1ere solution :Tres spécifique à ton site et à ton besoin, en modifiant le fichier order.php (besoin de remodifier ce fichier si tu changes de version prestashop)Il faut remplacer le code if (!$cookie->isLogged() AND in_array($step, array(1, 2, 3))) Tools::redirect('authentication.php?back=order.php?step='.$step); if ($cart->nbProducts()) { /* Manage discounts */ if ((Tools::isSubmit('submitDiscount') OR isset($_GET['submitDiscount'])) AND Tools::getValue('discount_name')) BlaBlaBla par : if (!$cookie->isLogged() AND in_array($step, array(1, 2, 3))) Tools::redirect('authentication.php?back=order.php?step='.$step); /* code ajoute */ $nbProds = $cart->nbProducts(); if ( ($nbProds > 0) AND ($nbProds%6 <>0) ) { $step = 0; $errors[] = Tools::displayError('The number of bottles you order must be multiple of 6'); } /* Fin code ajoute */ if ($cart->nbProducts()) { /* Manage discounts */ if ((Tools::isSubmit('submitDiscount') OR isset($_GET['submitDiscount'])) AND Tools::getValue('discount_name')) BlaBlaBla Ensuite, un p'tit tour dans le back office : Outils/Traductions/traduction des erreurs pour passer le message en françaisLe tour est joué.2ie solution : plus complexeLa solution précedente ne fonctionne que si tu vends uniquement des bouteilles.Les tire-bouchons, thermomètres et autre sont vendus à l'unité, les verres, ca se discute.Dans ce cas, tu mets ces autres produits dans des catégories différentes de tes bouteilles.Il faut alors rajouter une méthode à la class cart (classes/cart.php) qui parcourt tous les produits du panier et retourne la somme de ceux qui sont dans une catégorie de bouteilles.Dans order.php, remplacer le $nbProds = $cart->nbProducts(); par $nbProds = $cart->laNouvelleMethode(); Link to comment Share on other sites More sharing options...
ningu Posted May 20, 2009 Share Posted May 20, 2009 Bon, je poste derriere plutot que modifier mon post précédent.Je viens de me ballader sur ton site et mes propositions ne fonctionneront pas :par des déclinaisons, tu vends soit des bouteilles, soit des cartons.Donc ma 1ere solution ne fonctionnera pas (1 carton c'est un article dans le panier, pas 6)La 2ie serait à creuser, en testant les déclinaisons plutôt que les catégories Link to comment Share on other sites More sharing options...
Chris2008 Posted May 21, 2009 Author Share Posted May 21, 2009 2ie solution : plus complexeLa solution précedente ne fonctionne que si tu vends uniquement des bouteilles.Les tire-bouchons, thermomètres et autre sont vendus à l'unité, les verres, ca se discute.Dans ce cas, tu mets ces autres produits dans des catégories différentes de tes bouteilles.Il faut alors rajouter une méthode à la class cart (classes/cart.php) qui parcourt tous les produits du panier et retourne la somme de ceux qui sont dans une catégorie de bouteilles.Dans order.php, remplacer le $nbProds = $cart->nbProducts(); par $nbProds = $cart->laNouvelleMethode();Salut,Ca ne sera que des bouteilles pour le momentOn ne peut donc pas vérifier si la quantité est multiple de 6 dans le panier ???? Link to comment Share on other sites More sharing options...
ningu Posted May 21, 2009 Share Posted May 21, 2009 Voilà la solution :Dans le fichier classes/cart.php, ajouter la fonction suivante à la classe : public function nbBouteilles() { if (!$this->id) return 0; $sql = "SELECT sum( cp.quantity ) as nb FROM ps_cart_product AS cp LEFT JOIN ps_product_attribute AS pa ON cp.id_product_attribute = pa.id_product_attribute LEFT JOIN ps_product_attribute_combination AS pac ON cp.id_product_attribute = pac.id_product_attribute WHERE (cp.id_cart = ".$this->id.") AND pac.id_attribute IN ( SELECT att.id_attribute FROM ps_attribute AS att LEFT JOIN ps_attribute_lang AS al ON att.id_attribute = al.id_attribute LEFT JOIN ps_attribute_group_lang AS agl ON att.id_attribute_group = agl.id_attribute_group WHERE al.name = '1 bouteille' AND agl.name = 'parCombien' )"; $row = Db::getInstance()->getRow($sql); return intval($row['nb']); } Dans le fichier order.php, mettre les modifs suivantes au lieu de la solution 1 décrite plus haut : if (!$cookie->isLogged() AND in_array($step, array(1, 2, 3))) Tools::redirect('authentication.php?back=order.php?step='.$step); $nbBouteilles = $cart->nbBouteilles(); if ( ($nbBouteilles > 0) AND ($nbBouteilles %6 <>0) ) { $step = 0; $errors[] = Tools::displayError('The number of bottles you order must be multiple of 6. Number in cart : '.$nbBouteilles); } if ($cart->nbProducts()) { /* Manage discounts */ if ((Tools::isSubmit('submitDiscount') OR isset($_GET['submitDiscount'])) AND Tools::getValue('discount_name')) { BlaBlaBla Penser à la traductionCette fonction somme les quantités de tous les produits qui ont l'attribut 'parCombien' à la valeur '1 bouteille'.Pour ton site, il faudrait changer dans le code ci-dessus le 'parCombien' par 'quantite' et le '1 bouteille' par 'x1 (1bouteille)' Link to comment Share on other sites More sharing options...
Chris2008 Posted May 21, 2009 Author Share Posted May 21, 2009 Salut Merci pour ta réponse mais j't'avouerai que ce n'est pas très clair pour moi j'ai modifié le code des fichiers indiqués mais erreur affichéhttp://img29.imageshack.us/img29/2271/63636461.jpgDe plus je n'ai pas su trouvé où changer les attributs Par Combien, etc...Voilà le code source actuel (avec modifs de mes 2 fichiers)ORDER.PHP /* Check minimal account */ $orderTotal = $cart->getOrderTotal(); $orderTotalDefaultCurrency = Tools::convertPrice($cart->getOrderTotal(true, 1), Currency::getCurrency(intval(Configuration::get('PS_CURRENCY_DEFAULT')))); $minimalPurchase = floatval(Configuration::get('PS_PURCHASE_MINIMUM')); if ($orderTotalDefaultCurrency < $minimalPurchase) { $step = 0; $errors[] = Tools::displayError('A minimum purchase total of').' '.Tools::displayPrice($minimalPurchase, Currency::getCurrency(intval($cart->id_currency))). ' '.Tools::displayError('is required in order to validate your order'); } if (!$cookie->isLogged() AND in_array($step, array(1, 2, 3))) Tools::redirect('authentication.php?back=order.php?step='.$step); $nbBouteilles = $cart->nbBouteilles(); if ( ($nbBouteilles > 0) AND ($nbBouteilles %6 <>0) ) { $step = 0; $errors[] = Tools::displayError('The number of bottles you order must be multiple of 6. Number in cart : '.$nbBouteilles); } if ($cart->nbProducts()) { /* Manage discounts */ if ((Tools::isSubmit('submitDiscount') OR isset($_GET['submitDiscount'])) AND Tools::getValue('discount_name')) { $discountName = Tools::getValue('discount_name'); if (!Validate::isDiscountName($discountName)) $errors[] = Tools::displayError('voucher name not valid'); else { $discount = new Discount(intval(Discount::getIdByName($discountName))); if (is_object($discount) AND $discount->id) { if ($tmpError = $cart->checkDiscountValidity($discount, $cart->getDiscounts(), $cart->getOrderTotal(), $cart->getProducts(), true)) $errors[] = $tmpError; } else $errors[] = Tools::displayError('voucher name not valid'); if (!sizeof($errors)) { $cart->addDiscount(intval($discount->id)); Tools::redirect('order.php'); } else { $smarty->assign(array( 'errors' => $errors, 'discount_name' => Tools::safeOutput($discountName))); } } } elseif (isset($_GET['deleteDiscount']) AND Validate::isUnsignedId($_GET['deleteDiscount'])) { $cart->deleteDiscount(intval($_GET['deleteDiscount'])); Tools::redirect('order.php'); } CART.PHP //if cart.php is called by ajax if (Tools::getValue('ajax') == 'true') require_once(_PS_MODULE_DIR_.'/blockcart/blockcart-ajax.php'); else { if (sizeof($errors)) { require_once(dirname(__FILE__).'/header.php'); $smarty->assign('errors', $errors); $smarty->display(_PS_THEME_DIR_.'errors.tpl'); require_once(dirname(__FILE__).'/footer.php'); } else Tools::redirect('order.php?'.(isset($idProduct) ? 'ipa='.intval($idProduct) : '')); } public function nbBouteilles() { if (!$this->id) return 0; $sql = "SELECT sum( cp.quantity ) as nb FROM ps_cart_product AS cp LEFT JOIN ps_product_attribute AS pa ON cp.id_product_attribute = pa.id_product_attribute LEFT JOIN ps_product_attribute_combination AS pac ON cp.id_product_attribute = pac.id_product_attribute WHERE (cp.id_cart = ".$this->id.") AND pac.id_attribute IN ( SELECT att.id_attribute FROM ps_attribute AS att LEFT JOIN ps_attribute_lang AS al ON att.id_attribute = al.id_attribute LEFT JOIN ps_attribute_group_lang AS agl ON att.id_attribute_group = agl.id_attribute_group WHERE al.name = '1 bouteille' AND agl.name = 'parCombien' )"; $row = Db::getInstance()->getRow($sql); return intval($row['nb']); } ?> j'ai joint les 2 fichiers au cas ou je ne soit pas clair dans mon codemerci order.php cart.php Link to comment Share on other sites More sharing options...
ningu Posted May 21, 2009 Share Posted May 21, 2009 Tu as quelle version de prestashop ?Pour order.php, ca me parait bon.Pour Cart.php, il faut modifier le fichier Cart.php dans le répertoire classes (pas celui dans le même répertoire que order.php)Ci-joint le fichier modifé : prend le comme exemple pour insérer le nouvelle méthode, mais ne le copie pas sur ton install (il vient d'une version SVN pas stable)Pour les noms des attributs, c'est la partie de code suivante de la function nbBouteilles qu'il faut modifier avec les noms exacts que tu utilises : WHERE al.name = '1 bouteille' AND agl.name = 'parCombien' Sur ton site, je pense que tu utilises 'quantite' (au lieu de parCombien') et 'x1 (1 bouteille)' (au lieu de '1 bouteille')Précision : ca ne compte que le nombre de bouteilles commandées à l'unité, pas celle directement commandées dans un carton (comme les cartons sont pleins, pas la peine de les compter) Cart.php Link to comment Share on other sites More sharing options...
Chris2008 Posted May 21, 2009 Author Share Posted May 21, 2009 Voici pour les infos de mon prestashop et voilà ce que donne mon code CART.PHP dans le repertoir Classesj'ai modifié les attributs par ceux créés dans l'administration de photoshophttp://img199.imageshack.us/img199/5918/90740110.jpgLà beh c'est page blanche directement ! http://boutique.sol-payre.com/ j'ai du coup remis le fichier originalVersion 1.1.0.5 /** * Return cart products quantity * * @result integer Products quantity */ public function nbBouteilles() { if (!$this->id) return 0; $sql = "SELECT sum( cp.quantity ) as nb FROM ps_cart_product AS cp LEFT JOIN ps_product_attribute AS pa ON cp.id_product_attribute = pa.id_product_attribute LEFT JOIN ps_product_attribute_combination AS pac ON cp.id_product_attribute = pac.id_product_attribute WHERE (cp.id_cart = ".$this->id.") AND pac.id_attribute IN ( SELECT att.id_attribute FROM ps_attribute AS att LEFT JOIN ps_attribute_lang AS al ON att.id_attribute = al.id_attribute LEFT JOIN ps_attribute_group_lang AS agl ON att.id_attribute_group = agl.id_attribute_group WHERE al.name = 'x1 (1 bouteille)' AND agl.name = 'Quantite' )"; $row = Db::getInstance()->getRow($sql); return intval($row['nb']); } /** * Add a discount to the cart (NO controls except doubles) Link to comment Share on other sites More sharing options...
123julien Posted December 30, 2009 Share Posted December 30, 2009 Bonjour,Je me permets de réouvrir ce billet car la solution mise en place m'intéresse beaucoup mais je n'arrive pas à mes fins.Lorsque j'utilise le code proposé j'ai une erreur en retour.J'ai changé les attributs WHERE al.name = '1' AND agl.name = 'Quantite' Mais rien n'y fait et malheureusement j'ai des produits (bouteilles également) que je souhaite vendre par 3 minimum et des goodies que je souhaite vendre à l'unité.Dois-je modifier quelque chose de particulier pour donné l'attribut "bouteille" à mes produits dans le B.O.? Je n'ai pas bien compris cette étape.D'avance merciJulien Link to comment Share on other sites More sharing options...
baal Posted May 20, 2010 Share Posted May 20, 2010 bjr un probleme dans le style pour mon sitemerci de votre aide!je souhaiterai que tous les produits à 6 € vendu par deux donnent (10€ le lot)je ne peux pas faire de lot car il existe beaucoup de choix à 6 € sur mon site.(le client fait son lot parmis tous les articles du site)donc il me faudrait une formule qui me permette de direchaque paire d articles à 6€ donnent reduction de 2 eurosest ce possible? mercije suis en version 1.2.5 Link to comment Share on other sites More sharing options...
Kriss Posted May 27, 2010 Share Posted May 27, 2010 Bonjour à tous,première fois que je poste sur ce forum qui m'a l'air aussi utile que réactif, donc merci d'avance à ceux qui m'aideront. (je pense plus être aidé qu'aider dans un premier temps.J'ai mis en place la première solution de ningu qui marche parfaitement, et j'ai maintenant besoin de sa deuxième solution (possibilité de vendre des bouteilles obligatoirement par 6 mais aussi des autres produits à l'unité)malheureusement, je n'arrive pas à y faire fonctionner : ou trouve t'on le moyen de mettre à tel ou tel article l'attribut x1 (1bouteille)?faut-il mettre les produits dans des catégories différentes?J'ai changer le code de order.php et de classes/Cart.php mais cela n'a pas l'air de changer comme je le voudrais.Cordialement,Kriss Link to comment Share on other sites More sharing options...
NinjaTune Posted May 27, 2010 Share Posted May 27, 2010 Bonjour,Pour ajouter les attributs, ça se passe dans "Catalogue", onglet "Attributs et groupe"Ensuite tu édite ton produit, tu vas dans la partie "3 - Déclinaison", tu sélectionne ton groupe et l'attribut souhaité, tu l'ajoute, puis tu descend un peu et tu clique sur le bouton "Ajouter cette déclinaison" (sinon c'est pas enregistré )-Par contre, j'en profite pour poser une question par rapport à la traduction du message d'erreur : Ensuite, un p’tit tour dans le back office : Outils/Traductions/traduction des erreurs pour passer le message en français L'erreur ajoutée dans le fichier order.php n'y apparait pas, j'ai fait une erreur quelque part ?Merci d'avance ! Link to comment Share on other sites More sharing options...
Kriss Posted May 31, 2010 Share Posted May 31, 2010 Merci pour ta réponse NinjaTune, cela marche parfaitement chez moi, maintenant.hormis que j'ai aussi le soucis de la traduction de l'erreur : $errors[] = Tools::displayError('The number of bottles you order must be multiple of 6. Number in cart : '.$nbBouteilles); Elle n'apparait pas dans Outils/Traductions/traduction? Est-ce du au faite qu'il y ai une variable? ($nbBouteilles) Link to comment Share on other sites More sharing options...
baal Posted June 2, 2010 Share Posted June 2, 2010 j ai un probleme identique merci de vos lumieres!j aimerai proposer une remise de 2 euros automatique pour l achat de 2 produits a 6 euros.sur l ensemble de mon siteetc pour 4, 6, 8....le client fait son propre lot de 2 articles et chaque paire de 6euros acheté, on remise 2 eurosestce possible merci..jerome Link to comment Share on other sites More sharing options...
Arphaxad Posted December 4, 2010 Share Posted December 4, 2010 Facile à mettre en place et fonctionne très bien ! Merci. Pour la traduction, rien de plus simple, tu remplaces le texte (là où il est) par le même texte en français. Link to comment Share on other sites More sharing options...
puskiano Posted January 30, 2015 Share Posted January 30, 2015 Bonjour à tous , Je ne comprends pas où trouver order.php . J'en ai 2 , un avec une majuscule Order.php dans classes et un autre sans majuscule mais qui est presque vide à la racine . Pourriez vous m'aider svp ? Merci par avance David Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now