Jump to content

Edit History

Impe-M

Impe-M

On 12/1/2018 at 12:20 PM, codencode dice:

Ho dato un controllo ai file della versione 1.7.2.4 e mancano proprio le istruzioni per verificare se uno o più articoli nel carrello sono disponibili o meno, di conseguenza il sistema consente di effettuare l'ordine.

Bisogna attendere le prossime versioni e verificare se inseriscono questo controllo.

Per ovviare momentaneamente a questo problema ho buttato giù qualche riga di codice prendendo spunto dalla versione 1.6.

I file da aggiornare sono i controller del carrello e dell'ordine.

File OrderController.php

Metodo postProcess, appena prima dell'istruzione



 parent::postProcess();

Va inserito il seguente codice



    	/***** modifica per controllo disponibilità articoli nel carrello *****/
    	$product = $this->context->cart->checkQuantities(true);
    	
    	if ((int)$id_product = $this->context->cart->checkProductsAccess()) {
    		Tools::redirect('index.php?controller=cart&action=show');
    	}
    	 
    	// If some products have disappear
    	if (is_array($product)) {
    		Tools::redirect('index.php?controller=cart&action=show');
    	}
    	
    	/**********************************************************************/

File CartController.php

Metodo init, appena dopo l'istruzione 



parent::init();

Va inserito il seguente codice



        /***** modifica per controllo disponibilità articoli nel carrello *****/        
        $product = $this->context->cart->checkQuantities(true);
        
        if ((int)$id_product = $this->context->cart->checkProductsAccess()) {
        	$this->errors[] =  $this->trans(
        			'An item in your cart is no longer available (%1s). You cannot proceed with your order.', array(Product::getProductName((int)1)), 'Shop.Notifications.Error'
        			);
        }
         
        // If some products have disappear
        if (is_array($product)) {
        	$this->errors[] =  $this->trans(
        			'An item (%1s) in your cart is no longer available in this quantity. You cannot proceed with your order until the quantity is adjusted.', array( $product['name']), 'Shop.Notifications.Error'
        			);
        }
        /**********************************************************************/

In caso di aggiornamento bisognerà aggiornare nuovamente questi file.

In alternativa si può eseguire l'override dei 2 file che allego, da notare che probabilmente prima o poi il supporto degli override verrà eliminato.

Ovviamente poi vanno fatte le 2 traduzioni dei messaggi di errore.

Come al solito prima di apportare le modifiche consiglio di fare una copia di backup dei file e del database, inoltre consiglio di apportare le modifiche prima su una versione di test o in locale. 

Ho lo stesso bug, provo ad implementare questa soluzione... e: FUNZIONA!!!!!! Grazie Mille 

 

A presto

Impe-M

Impe-M

On 12/1/2018 at 12:20 PM, codencode dice:

Ho dato un controllo ai file della versione 1.7.2.4 e mancano proprio le istruzioni per verificare se uno o più articoli nel carrello sono disponibili o meno, di conseguenza il sistema consente di effettuare l'ordine.

Bisogna attendere le prossime versioni e verificare se inseriscono questo controllo.

Per ovviare momentaneamente a questo problema ho buttato giù qualche riga di codice prendendo spunto dalla versione 1.6.

I file da aggiornare sono i controller del carrello e dell'ordine.

File OrderController.php

Metodo postProcess, appena prima dell'istruzione


 parent::postProcess();

Va inserito il seguente codice


    	/***** modifica per controllo disponibilità articoli nel carrello *****/
    	$product = $this->context->cart->checkQuantities(true);
    	
    	if ((int)$id_product = $this->context->cart->checkProductsAccess()) {
    		Tools::redirect('index.php?controller=cart&action=show');
    	}
    	 
    	// If some products have disappear
    	if (is_array($product)) {
    		Tools::redirect('index.php?controller=cart&action=show');
    	}
    	
    	/**********************************************************************/

File CartController.php

Metodo init, appena dopo l'istruzione 


parent::init();

Va inserito il seguente codice


        /***** modifica per controllo disponibilità articoli nel carrello *****/        
        $product = $this->context->cart->checkQuantities(true);
        
        if ((int)$id_product = $this->context->cart->checkProductsAccess()) {
        	$this->errors[] =  $this->trans(
        			'An item in your cart is no longer available (%1s). You cannot proceed with your order.', array(Product::getProductName((int)1)), 'Shop.Notifications.Error'
        			);
        }
         
        // If some products have disappear
        if (is_array($product)) {
        	$this->errors[] =  $this->trans(
        			'An item (%1s) in your cart is no longer available in this quantity. You cannot proceed with your order until the quantity is adjusted.', array( $product['name']), 'Shop.Notifications.Error'
        			);
        }
        /**********************************************************************/

In caso di aggiornamento bisognerà aggiornare nuovamente questi file.

In alternativa si può eseguire l'override dei 2 file che allego, da notare che probabilmente prima o poi il supporto degli override verrà eliminato.

Ovviamente poi vanno fatte le 2 traduzioni dei messaggi di errore.

Come al solito prima di apportare le modifiche consiglio di fare una copia di backup dei file e del database, inoltre consiglio di apportare le modifiche prima su una versione di test o in locale. 

Ho lo stesso bug, provo ad implementare questa soluzione. Hai trovato qualche altra soluzione nel frattempo?

 

A presto

×
×
  • Create New...