ben1278 Posted March 24, 2016 Share Posted March 24, 2016 Bonjour, Je suis à la recherche d'une technique ou d'un module qui pourrait me permettre de laisser mes clients choisir le montant qu'ils veulent payer mais en bloquant le montant à minimum 10€ et maximum 30€. Si quelqu'un à une idée je suis preneur ! Link to comment Share on other sites More sharing options...
Alexandre Carette Posted March 24, 2016 Share Posted March 24, 2016 bonjour, En créeant un formulaire qui va mettre a jour le prix du produit, dans le contrôleur du formulaire on vérifie si le prix est entre 10 et 30 si oui on fait un update de la table sinon on affiche un message d'erreur Link to comment Share on other sites More sharing options...
ben1278 Posted March 24, 2016 Author Share Posted March 24, 2016 Bonjour, Merci pour vos réponses. bonjour, En créeant un formulaire qui va mettre a jour le prix du produit, dans le contrôleur du formulaire on vérifie si le prix est entre 10 et 30 si oui on fait un update de la table sinon on affiche un message d'erreur Salut Alex, Je ne vois pas trop comment un formulaire pourrait me permettre d'obtenir un prix libre, et à vrai dire je ne sais pas non plus comment créer un formulaire. Pourrais-tu donner plus d'explications ? Merci ! Bonjour, Sinon je pensais à de simples déclinaisons. Un prix de base 10 Eur Une déclinaison avec 0€ d'impact qui s'appelle 10€ Une déclinaison avec 1€ d'impact qui s'appelle 11€ Une déclinaison avec 2€ d'impact qui s'appelle 12€ .... 3pom Hello okom3pom, L'idée est pas mal en effet ! C'est fait un peu système D mais ca peut être efficace, merci pour l'idée. Link to comment Share on other sites More sharing options...
ben1278 Posted March 24, 2016 Author Share Posted March 24, 2016 Non justement c'est pas du système D mais la logique de Prestashop. Sinon une personne ce matin m'a soufflé dans l'oreille qu'il existait un module gratuit sur le forum pour ça. Désolé j'ai toujours eu du mal avec la logique de Prestashop Et est-ce que la personne qui t'as soufflé l'existence d'un module pour ça t'as aussi précisé le nom de ce fameux module ? Thanks, Ben. Link to comment Share on other sites More sharing options...
Alexandre Carette Posted March 24, 2016 Share Posted March 24, 2016 (edited) Salut Alex, Je ne vois pas trop comment un formulaire pourrait me permettre d'obtenir un prix libre, et à vrai dire je ne sais pas non plus comment créer un formulaire. Pourrais-tu donner plus d'explications ? Merci ! Coté product.tpl <!-- Change Price Form Alex--> <h2>Ici on peut changer le prix entre 11 et 29</h2> {if isset($confirm)} <p class="success">{l s='Changement de prix ok.'}</p> {/if} <form action="#" method="post"> <input type="hidden" value="{$product->id}" name="id_product"> <input type="text" value="" name="prix"> <button type="submit" id="isChangePrice" name="isChangePrice">Envoyer</button> </form> <!-- Change Price Form Alex--> Edited March 25, 2016 by Alex-Kodd (see edit history) Link to comment Share on other sites More sharing options...
Alexandre Carette Posted March 24, 2016 Share Posted March 24, 2016 (edited) Override ProductController.php <?php class ProductController extends ProductControllerCore { public function postProcess() { if (Tools::isSubmit('isChangePrice')) { //On récupère les valeurs du formulaire $id_product=Tools::getValue('id_product'); $prix=Tools::getValue('prix'); // Verification des champs pour se prémunir des injections SQL if (!$prix) { $this->errors[] = Tools::displayError('Le prix est vide'); } elseif (!Validate::isPrice($prix)) { $this->errors[] = Tools::displayError('Le prix n\'est pas valide'); } // On veut un prix entre 10 et 30 elseif ($prix <= 10) { $this->errors[] = Tools::displayError('Le prix est inferieur ou egale à 10'); } elseif ($prix >= 30) { $this->errors[] = Tools::displayError('Le prix est supérieur ou egale à 30'); } // Verification des champs pour se prémunir des injections SQL elseif (!Validate::isInt($id_product) { $this->errors[] = Tools::displayError('ID produit non valide'); } else { //si tout va bienn on utilise la méthode update_prix de notre classe Product Product::update_prix($id_product,$prix); $this->context->smarty->assign('confirm', 1); } } } } Edited March 24, 2016 by Alex-Kodd (see edit history) Link to comment Share on other sites More sharing options...
Alexandre Carette Posted March 24, 2016 Share Posted March 24, 2016 (edited) il reste plus qu'a faire une nouvelle méthode dans notre classe Product.php afin de mettre a jour le produit, (on a l id du produit et un prix dans les champs du formulaire) Edited March 24, 2016 by Alex-Kodd (see edit history) Link to comment Share on other sites More sharing options...
Alexandre Carette Posted March 24, 2016 Share Posted March 24, 2016 (edited) Override de la classe Product.php <?php class Product extends ProductCore { public $prix; public static function update_prix($id_product,$prix) { //On update le prix du produit dans la table ps_product $sql='UPDATE ps_product SET price = "'.$prix.'" WHERE id_product = "'.$id_product.'" '; if (!Db::getInstance()->execute($sql)) die('Erreur'); //On update le prix du produit dans la table ps_product_shop (voir si on peux pas fusionner avec en haut) $sql2='UPDATE ps_product_shop SET price = "'.$prix.'" WHERE id_product = "'.$id_product.'" '; if (!Db::getInstance()->execute($sql2)) die('Erreur'); // On refresh la page produit $lien= "index.php?controller=product&id_product=".$id_product; Tools::redirect($lien); } } exemple: http://demo.alexandrecarette.com/vierge/prestashop/t-shirts/1-t-shirt-delave-manches-courtes.html voila tu as toutes les clefs pour comprendre... il faut le faire a ta sauce maintenant Edited March 24, 2016 by Alex-Kodd (see edit history) Link to comment Share on other sites More sharing options...
ben1278 Posted March 25, 2016 Author Share Posted March 25, 2016 Override de la classe Product.php <?php class Product extends ProductCore { public $prix; public static function update_prix($id_product,$prix) { //On update le prix du produit dans la table ps_product $sql='UPDATE ps_product SET price = "'.$prix.'" WHERE id_product = "'.$id_product.'" '; if (!Db::getInstance()->execute($sql)) die('Erreur'); //On update le prix du produit dans la table ps_product_shop (voir si on peux pas fusionner avec en haut) $sql2='UPDATE ps_product_shop SET price = "'.$prix.'" WHERE id_product = "'.$id_product.'" '; if (!Db::getInstance()->execute($sql2)) die('Erreur'); // On refresh la page produit $lien= "index.php?controller=product&id_product=".$id_product; Tools::redirect($lien); } } exemple: http://demo.alexandrecarette.com/vierge/prestashop/t-shirts/1-t-shirt-delave-manches-courtes.html voila tu as toutes les clefs pour comprendre... il faut le faire a ta sauce maintenant Merci beaucoup Alex !! C'est exactement ce que je recherchais ! J'ai plus qu'à l'adapter et ca devrait le faire ; Thanks Link to comment Share on other sites More sharing options...
Oron Posted March 25, 2016 Share Posted March 25, 2016 Bonjour je déplace votre topic dans le forum Prestashop pour les développeurs il est plus adéquate que Discussion générale. Link to comment Share on other sites More sharing options...
Ekks-O Posted May 30, 2016 Share Posted May 30, 2016 Salut à tous, J'ai plusieurs questions sur votre solution de prix libre (qui me semble pas mal dans l'ensemble) Est-il possible de n'appliquer ce mode de choix du prix qu'à une seule catégorie du site ? En choisissant un prix minimum directement dans le back-office de Prestashop (différent pour chaque produit concerné, dans l'idéal) Ben1278 : //On update le prix du produit dans la table ps_product_shop (voir si on peux pas fusionner avec en haut)$sql2='UPDATE ps_product_shopSET price = "'.$prix.'"WHERE id_product = "'.$id_product.'"'; Editer la base ne va pas modifier le prix de façon permanente ? Merci, en tout cas ! Link to comment Share on other sites More sharing options...
Alexandre Carette Posted May 30, 2016 Share Posted May 30, 2016 (edited) Est-il possible de n'appliquer ce mode de choix du prix qu'à une seule catégorie du site ? --> Oui bien sur, le plus simple c'est à l'affichage du tpl on applique une condition smarty (on configure la catégorie par défaut du produit pour qu'elle corresponde à l'id catégorie souhaitée) {if $product->id_category_default == 'id_de_ta_categorie'} <!-- Change Price Form Alex--> <h2>Ici on peut changer le prix entre 11 et 29</h2> {if isset($confirm)} <p class="success">{l s='Changement de prix ok.'}</p> {/if} <form action="#" method="post"> <input type="hidden" value="{$product->id}" name="id_product"> <input type="text" value="" name="prix"> <button type="submit" id="isChangePrice" name="isChangePrice">Envoyer</button> </form> <!-- Change Price Form Alex--> {/if} En choisissant un prix minimum directement dans le back-office de Prestashop (différent pour chaque produit concerné, dans l'idéal)--> la encore c'est possible en ajoutant un champ perso (prix_min) dans la fiche produit http://www.paulineghiazza.fr/ajouter-un-champ-dans-le-backoffice-prestashop-1-5/ on passe la valeur du prix minimum dans le formulaire... <form action="#" method="post"> <input type="hidden" value="{$product->id}" name="id_product"> <input type="text" value="" name="prix"> <input type="hidden" value="{$product->prix_min}" name="prix_min"> <button type="submit" id="isChangePrice" name="isChangePrice">Envoyer</button> </form> Dans le controller on récupere et on traite le prix minimum: <?php class ProductController extends ProductControllerCore { public function postProcess() { if (Tools::isSubmit('isChangePrice')) { //On récupère les valeurs du formulaire $id_product=Tools::getValue('id_product'); $prix=Tools::getValue('prix'); $prix_min=Tools::getValue('prix_min'); // Verification des champs pour se prémunir des injections SQL if (!$prix) { $this->errors[] = Tools::displayError('Le prix est vide'); } elseif (!Validate::isPrice($prix)) { $this->errors[] = Tools::displayError('Le prix n\'est pas valide'); } // On veut un prix entre $prix_min et 30 elseif ($prix <= $prix_min) { $this->errors[] = Tools::displayError('Le prix est inferieur ou egale à 10'); } elseif ($prix >= 30) { $this->errors[] = Tools::displayError('Le prix est supérieur ou egale à 30'); } // Verification des champs pour se prémunir des injections SQL elseif (!Validate::isInt($id_product) { $this->errors[] = Tools::displayError('ID produit non valide'); } else { //si tout va bienn on utilise la méthode update_prix de notre classe Product Product::update_prix($id_product,$prix); $this->context->smarty->assign('confirm', 1); } } } } Edited May 30, 2016 by Alex-Kodd (see edit history) 1 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