Jump to content

[RESOLU]configurer poids + prix pour un transporteur (carrier.php)


pouc

Recommended Posts

Bonjour,

 

Je souhaiterais réaliser une modification de la classe Cart.

 

Le but de cette modification est de pouvoir offrir les frais de port au dessus de 50 euros mais si ça dépasse 2kg je veux que le transporteur "socollisimo" disparaisse.

 
manit4c (Olivier C.),  m'a fait avancé et je l'en remercie en me donnant les conseils suivants :
 

1) repérer la fonction qui donne le poids total du panier elle se trouve dans la class cart.php si je ne me trompe pas et doit s'appeler totalWeight ou un truc dans le genre.

 

2) Repérer toujours dans la class cart la fonction qui va définir les transporteurs valable pour le panier courant elle doit s'appeler getDeliveryOption ou un truc du genre.

 

3) modifier cette dernière fonction pour qu'elle vérifie également le poids total du panier (via la fonction que t'as repéré étape 1). Si le poids dépasse 2000 (je crois que c'est en grammes) tu enlève le transporteur que tu veux pas voir apparaître dans ce cas (il faut que tu repère son ID)

 

Le seul problème est le code à intégrer sur lequel je galère un peu.

 

Quelqu'un aurait-il une petite idée?

 

Merci.

 

Baptiste

 

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

J'ai un peu avancé alors dans totalWeight j'ai définis le poids de cette façon :

 

$total_weight > 2;
            foreach ($products as $product)
            {
                if (!isset($product['weight_attribute']) || is_null($product['weight_attribute']))
                    $total_weight += $product['weight'] * $product['cart_quantity'];
                else
                    $total_weight += $product['weight_attribute'] * $product['cart_quantity'];
            }

 

Et pour getDeliveryOption :

 

if ($total_weight > 2)
        {
            array ($id_carrier = 149);
            array_splice ($id_carrier);
        }

 

je sèche complétement!! quelqu'un pour une idée?

 

Merci

 

Baptiste

Link to comment
Share on other sites

Merci a Szed qui à trouvé la solution sur ce topic : http://www.prestashop.com/forums/topic/355025-frais-de-port-selon-transporteur-et-zones/page-2?do=findComment&comment=1810491

 

 

Dans la function getAvailableCarrierList de la classe Carrier, tout en bas, j'ai rajouté la dernière ligne du if  :  if (($carrier->max_width > 0 && $carrier->max_width < $product->width)
|| ($carrier->max_height > 0 && $carrier->max_height < $product->height)
|| ($carrier->max_depth > 0 && $carrier->max_depth < $product->depth)
|| ($carrier->max_weight > 0 && $carrier->max_weight < $product->weight)
|| ($carrier->max_weight > 0 && (float)$carrier->max_weight < $cart->getTotalWeight())
){
unset($carrier_list[$key]);
} Sans celle ci, ce que le transporteur comprend par "poids maxi du panier", est en fait : poids maxi du produit lors de l'ajout apparemment

 

 

Baptiste

Edited by pouc (see edit history)
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...