Jump to content

Déplacer Le Formulaire De La Page Adresse Pour Le Mettre Dans La Page Livraison


Recommended Posts

prestashop version 1.6.1.3
thème default-bootstrap de prestashop
serveur local

bonsoir

j'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 BO

j'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 Commander

le 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 BO

une petite idée serait la bienvenu, je vous remercie par avance,

Link to comment
Share on other sites

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;
}
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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;
    }
Link to comment
Share on other sites

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'));
	}
		
    }
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...