lion-s 3 Posted January 11, 2016 prestashop version 1.6.1.3thème default-bootstrap de prestashopserveur localbonsoirj'essaie d'ajouter le bloc formulaire (ou bloc commentaire) de la page Adresse pour le mettre dans la page Livraison du processus de commande (en 5 étape) pour que le client puisse laisser un message pour sa livraison et que son message soit récupéré dans le BOj'ai copié le code du formulaire qui est dans order-address.tpl (Adresse) de la ligne 94 à 99{if !$opc}<div id="ordermsg" class="form-group"><label>{l s='If you would like to add a comment about your order, please write it in the field below.'}</label><textarea class="form-control" cols="60" rows="6" name="message">{if isset($oldMessage)}{$oldMessage}{/if}</textarea></div>{/if}pour le coller dans order-carrier.tpl juste au dessus du bloc navigation Continuer mes achats et Commanderle bloc du formulaire apparaît dans la page Livraison du processus de commande, mais le message ne s'affiche pas en BO, dans le bloc des messages de la commande client, ni dans les messages.par contre si j’écris le message dans le formulaire depuis la page Adresse du processus de commande (qui est son emplacement), il s'affiche dans le bloc des messages de la commande client et dans les messages en BOune petite idée serait la bienvenu, je vous remercie par avance, Share this post Link to post Share on other sites
Mediacom87 1,284 Posted January 12, 2016 Bonjour, certainement que le code php qui récupère les données et les enregistre n'est présent que sur la page adresse. Share this post Link to post Share on other sites
lion-s 3 Posted January 12, 2016 bonjour est ce que tu sais quel est le code PHP qui permet de récupérer les données. dans l'attente, je te remercie par avance média Share this post Link to post Share on other sites
Mediacom87 1,284 Posted January 12, 2016 Dans controllers/front/OrderController.php dans public function processAddress() il y a if (Tools::isSubmit('message')) { $this->_updateMessage(Tools::getValue('message')); } et dans controllers/front/ParentOrderController.php protected function _updateMessage($messageContent) { if ($messageContent) { if (!Validate::isMessage($messageContent)) { $this->errors[] = Tools::displayError('Invalid message'); } elseif ($oldMessage = Message::getMessageByCartId((int)$this->context->cart->id)) { $message = new Message((int)$oldMessage['id_message']); $message->message = $messageContent; $message->update(); } else { $message = new Message(); $message->message = $messageContent; $message->id_cart = (int)$this->context->cart->id; $message->id_customer = (int)$this->context->cart->id_customer; $message->add(); } } else { if ($oldMessage = Message::getMessageByCartId($this->context->cart->id)) { $message = new Message($oldMessage['id_message']); $message->delete(); } } return true; } Share this post Link to post Share on other sites
lion-s 3 Posted January 12, 2016 je te remercie media, j'ai localisé le code sur les 2 pages que tu m'as cité. question bête, ce code je le place dans quel page ? Share this post Link to post Share on other sites
Mediacom87 1,284 Posted January 12, 2016 regardez le controller de commande pour trouver l'élément utilisé après le choix de la livraison et mettez if (Tools::isSubmit('message')) { $this->_updateMessage(Tools::getValue('message')); } dedans pour qu'il soit traité lors de l'enregistrement du choix du transporteur. Share this post Link to post Share on other sites
lion-s 3 Posted January 12, 2016 je dois collé le code dans controllers/front/ParentOrderController.php comme ceci protected function _updateMessage($messageContent) { if ($messageContent) { if (!Validate::isMessage($messageContent)) { $this->errors[] = Tools::displayError('Invalid message'); } elseif ($oldMessage = Message::getMessageByCartId((int)$this->context->cart->id)) { $message = new Message((int)$oldMessage['id_message']); $message->message = $messageContent; $message->update(); } else { $message = new Message(); $message->message = $messageContent; $message->id_cart = (int)$this->context->cart->id; $message->id_customer = (int)$this->context->cart->id_customer; $message->add(); } } else { if ($oldMessage = Message::getMessageByCartId($this->context->cart->id)) { $message = new Message($oldMessage['id_message']); $message->delete(); } } if (Tools::isSubmit('message')) { $this->_updateMessage(Tools::getValue('message')); } return true; } Share this post Link to post Share on other sites
Mediacom87 1,284 Posted January 12, 2016 non le parent controller est le controller proposant la fonction d'enregistrement du message. il suffit dans le controler traitant la livraison (le premier controller donné) de déplacer l'appel de la fonction. Share this post Link to post Share on other sites
lion-s 3 Posted January 12, 2016 bien qu'il m'arrive de faire des petites modifications en PHP, ce n'est pas un logiciel que je maitrise, si tu pouvais m'indiquer comment faire ce serait cool. Share this post Link to post Share on other sites
Mediacom87 1,284 Posted January 12, 2016 vous devez déplacer if (Tools::isSubmit('message')) { $this->_updateMessage(Tools::getValue('message')); } dans function processCarrier() je suppose Share this post Link to post Share on other sites
lion-s 3 Posted January 12, 2016 dans controllers/front/ParentOrderController.php je n'au pas trouvé de function processCarrier j'ai déplacé le code dans controllers/front/OrderController.php, mais cela ne fonctionne pas protected function processCarrier() { global $orderTotal; parent::_processCarrier(); if (count($this->errors)) { $this->context->smarty->assign('errors', $this->errors); $this->_assignCarrier(); $this->step = 2; $this->displayContent(); } $orderTotal = $this->context->cart->getOrderTotal(); if (Tools::isSubmit('message')) { $this->_updateMessage(Tools::getValue('message')); } } Share this post Link to post Share on other sites
lion-s 3 Posted January 12, 2016 juste pour te dire que cela fonctionne media. problème Résolu je te remercie pour ton aide. christophe Share this post Link to post Share on other sites