Jump to content
lion-s

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,

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

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

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

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

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

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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More