Jump to content

Recommended Posts

Un override de OrderController::init() suffit:

Créez un produit en BO correspondant a ces frais fixes et récupérez son ID (145 par exemple)

		/* Eolia minimum amount */
		$id_fees_product = 145;
		$minimum_amount = 10;
		if ($this->nbProducts && $this->step > 0 && $this->context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS) < $minimum_amount) {
			$this->step = 0;
            $this->context->cart->updateQty(1, $id_fees_product, 0, false, 'up', 0, null, false);
		}
		else {
			if ($result = $this->context->cart->containsProduct($id_fees_product))
				$this->context->cart->deleteProduct($id_fees_product);			
		}

 

Link to comment
Share on other sites

Merci pour cette réponse aussi rapide.

Etant novice sur cette notion d'override, je vais avoir besoin d'un peu de complément d'informations.

Le principe de l'override est bien de forcer Prestashop à un nouveau comportement.

Mais pouvez vous me préciser où je dois ranger ce fichier, sous quel nom et dois je y rajouter une ligne particulière ?

Second point : comme précisé dans mon post initial comment faire ces frais de gestion uniquement pour toute commande inférieure à un seuil 200 euros par exemple?

 

Link to comment
Share on other sites

Me revoila.

Je n'aime pas faire les choses sans les comprendre et certes pour comprendre il faut apprendre.

J'ai lu la documentation mais ce n'est pas suffisant pour ma compréhension.

Quand j'édite OrderController.php, je trouve ces lignes sur init à la ligne 67 (je suis sous la version 1.7.8.8)

   /**
     * Initialize order controller.
     *
     * @see FrontController::init()
     */
    public function init()
    {
        parent::init();
        $this->cartChecksum = new CartChecksum(new AddressChecksum());
    }

J'ai du mal à faire le lien avec le code que vous me proposez de mettre en remplacement, et cela dans un fichier d'override que je placerais où ?

Merci de votre aide et excusez mon ignorance dans ce domaine.

Link to comment
Share on other sites

Oui en 1.7 beaucoup de choses ont changé..

Vous mettez mon code à la suite de 

 $this->cartChecksum = new CartChecksum(new AddressChecksum());

Vous créez un nouveau fichier dans /overrides/controller/front que vous appellez OrderController.php

Et vous mettez dedans

<?php


class OrderController extends OrderControllerCore
{
    public function init()
    {
        parent::init();
        $this->cartChecksum = new CartChecksum(new AddressChecksum());
    
		/* Eolia minimum amount */
		$id_fee_product = 145;
		$minimum_amount = 10;
		if ($this->nbProducts && $this->context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS) < $minimum_amount) {
				$this->context->cart->updateQty(1, $id_fee_product, 0, false, 'up', 0, null, false);
		}
		else {
			if ($result = $this->context->cart->containsProduct($id_fee_product))
				$this->context->cart->deleteProduct($id_fee_product);			
		}
	}	
}

Ensuite vous videz le cache Prestashop depuis votre BO

Edited by Eolia (see edit history)
Link to comment
Share on other sites

je viens de créer le fichier override, l'installer, vider le cache, créer le "produit" frais de gestion, récupérer son Id, mettre à jour et simuler un achat de produit inférieur à mon seuil de 150 euros et j'ai un erreur 

<?php


class OrderController extends OrderControllerCore
{
    public function init()
    {
        parent::init();
        $this->cartChecksum = new CartChecksum(new AddressChecksum());
    
		/* modification pour frais de gestion en dessous de 150 euros code produit frais de gestion 361 */
		$id_fee_product = 361;
		$minimum_amount = 150;
		if ($this->nbProducts && $this->context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS) < $minimum_amount) {
				$this->context->cart->updateQty(1, $id_fee_product, 0, false, 'up', 0, null, false);
		}
		else {
			if ($result = $this->context->cart->containsProduct($id_fee_product))
				$this->context->cart->deleteProduct($id_fee_product);			
		}
	}	
}

 

Capture d'écran_20230210_162230.png

Link to comment
Share on other sites

Toujours en erreur. Ne faut-il pas forcer le nBProducts() à 1 ?

 

Parse error: syntax error, unexpected '$this' (T_VARIABLE), expecting '(' in /home/epicerieka/www/ps/override/controllers/front/OrderController.php on line 14


<?php


class OrderController extends OrderControllerCore
{
    public function init()
    {
        parent::init();
        $this->cartChecksum = new CartChecksum(new AddressChecksum());
    
		/* modification pour frais de gestion en dessous de 150 euros code produit frais de gestion 361 */
		$id_fee_product = 361;
		$minimum_amount = 150;
		if $this->context->cart->nbProducts() && $this->context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS) < $minimum_amount) {
				$this->context->cart->updateQty(1, $id_fee_product, 0, false, 'up', 0, null, false);
		}
		else {
			if ($result = $this->context->cart->containsProduct($id_fee_product))
				$this->context->cart->deleteProduct($id_fee_product);			
		}
	}	
}





 

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