Serial Posted February 27, 2018 Share Posted February 27, 2018 (edited) Bonjour, Il y a quelque chose que je ne comprends pas sur le développement de modules sous PS 1.6. Je suis en train de développer un module. Ce module permet au client de sélectionner un produit, puis de le personnaliser avec différentes options proposées. Chaque options augmentent le prix via un algorithme qui est appelé dans mon javascript front.js. J'ai donc un fichier .tpl placé dans views/templates/front/montpl.tpl qui affiche toutes les options de personnalisation au client et le front.js qui calcule un prix final. Ce template s'affiche bien, il est appelé depuis le product.tpl dans un formulaire représenté ci-dessous : <form action="{$link->getModuleLink('monmodule', 'validation', ['produit'=>$product->id], true)|escape:'html'}" method="post"> Ensuite, s'affiche le template du module et dans mon controleur, dans la méthode postProcess(), je récupère des infos du produit avec : $produit = new Product($produit_id, false, $id_lang); J'envoie ces infos sur mon template avec ca pour pouvoir les afficher à l'utilisateur : $this->context->smarty->assign('produit', $produit); Le problème qui se pose maintenant est que je souhaite faire un bouton "Ajouter au panier" dans mon template. Par contre, je ne sais pas où écrire les lignes pour pouvoir créer un panier. J'ai vu que l'on doit utiliser ceci : $cart = new Cart(); $cart->id_customer = (int)($this->context->cookie->id_customer); $cart->id_address_delivery = (int) (Address::getFirstCustomerAddressId($cart->id_customer)); $cart->id_address_invoice = $cart->id_address_delivery; $cart->id_lang = (int)($this->context->cookie->id_lang); $cart->id_currency = (int)($this->context->cookie->id_currency); $cart->id_carrier = 1; $cart->recyclable = 0; $cart->gift = 0; $cart->add(); $this->context->cookie->id_cart = (int)($cart->id); $cart->update(); Ou écrire ces lignes dans mon cas ? Merci de votre aide Edited February 28, 2018 by Serial (see edit history) Link to comment Share on other sites More sharing options...
Matt K. Posted February 27, 2018 Share Posted February 27, 2018 Salut, Tu as créé un front controller "validation" dans ton module (voir ici : https://www.packtpub.com/books/content/using-front-controllers-create-new-page) Link to comment Share on other sites More sharing options...
Serial Posted February 27, 2018 Author Share Posted February 27, 2018 Oui, le code de mon front controller validation est présenté comme ceci (fichier validation.php dans controllers/front) : <?php class confectiontduValidationModuleFrontController extends ModuleFrontController { public function postProcess() { // Mon traitement qui récupère des infos d'un produit et les envoie au tpl... } public function initContent() { $this->display_column_left = false; parent::initContent(); // Affiche le template du module confection.tpl $this->setTemplate('confection.tpl'); } } ?> Link to comment Share on other sites More sharing options...
Matt K. Posted February 27, 2018 Share Posted February 27, 2018 Ton traitement doit être placé dans postProcess comme indiqué dans le commentaire. ^^ Link to comment Share on other sites More sharing options...
Serial Posted February 27, 2018 Author Share Posted February 27, 2018 (edited) Le traitement pour ajouter le produit au panier ? Je ne comprends pas bien comment, lorsque le client va cliquer sur ce bouton Ajouter au panier, le système va comprendre qu'il faut faire la suite de la procédure postProcess... Edited February 27, 2018 by Serial (see edit history) Link to comment Share on other sites More sharing options...
Matt K. Posted February 28, 2018 Share Posted February 28, 2018 En fait tu sais ou placer ton code mais pas comment faire ta fonctionnalité ^^ Tu peux ajouter un produit à ton panier en utilisant la fonction updateQty de la classe Cart. Cette fonction prend les paramètre suivants : quantité du produits à ajouter ou retirer id du produit id de la déclinaison (si besoin) id de la customisation (si besoin) operator (up ou down) up par défaut l'id de l'adresse (si besoin) l'id de la boutique (si besoin) et enfin un booléan si tu veux que la fonction ajout une règle panier Généralement tu as accès au panier directement depuis le Context ($this->context->cart). Il ne faut pas créé un panier à chaque fois. MAIS, tout ça est à faire que si tu veux personnalisé l'ajout au panier. Si ton but est uniquement d'ajouter un bouton d'ajout au panier ailleurs sur le site, il y a des moyens bien plus simple de faire. Bon courage Link to comment Share on other sites More sharing options...
BeComWeb Posted February 28, 2018 Share Posted February 28, 2018 Bonjour, Il faut que tu interceptes le POST et que tu transmettes son contenu. Un truc dans ce style devrait faire le taf <?php class confectiontduValidationModuleFrontController extends ModuleFrontController { public function postProcess($) { $product_id = (int)Tools::getValue('product_id'); //name de ton input qui contient l'id produit // etc si autres valeurs à recuperer (quantité,...) $cart = new Cart((int)$this->context->cart->id); //tu recuperes l'objet Cart du client if(!Validate::isLoadedObject($cart)) { //Une exception ou une erreur retournee } //tu poursuis ton traitement en utilisant la methode updateQty() //a la fin tu penses a retourner un truc (true / false dans mon ex) } public function initContent() { $this->display_column_left = false; parent::initContent(); if(Tools::isSubmit('name_de_ton_submit') { $result = $this->postProcess(); //Tu peux ajouter if($result) { //Message de confirmation } else{ //Message d'erreur } } // Affiche le template du module confection.tpl $this->setTemplate('confection.tpl'); } } ?> 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