Jump to content

Recommended Posts

Bonjour,

 

Je suis en train de confirgurer ma boutique, et je m'amuse bien !

Jusqu'à ce que j'arrive à la question épineuse du franco de port à partir de xx€ (alors que j'utilise de transporteurs avec tranche de poids). Je sais que ce n'est pas gérable : le franco à 200€ pour la France c'est bien, mais pour La Réunion ou à pétaouchnok ça ne le fait pas du tout...

 

Donc je vous soumets mon idée :

 

1ère étape : J'ai des zones de définies, "France" (pour la France Métropolitaine), "France DOM" (pour Réunion, Guadeloupe, Guyane, Martinique), "DE+Benelux" (pour Allemagne, Luxembourg, BE et NL), etc... Je me dis pourquoi ne pas définir un franco différent pour chaque zone? Il suffirait dans la base de donnée, table ps_zone (si je ne m'abuse?), d'ajouter une variable "franco" par exemple. Ca je sais faire.

 

2ème étape : changer le fichier qui permet de dire s'il y a franco ou pas? Là ça me dépasse... Dans quel fichier est-ce? Et comment modifier la ligne de code? Je comprends le fonctionnement général, mais les lignes de code et la syntaxe j'ai du mal !

En gros il faut changer dans la ligne de code la référence à la variable PS_SHIPPING_FREE_PRICE, et dire d'aller chercher dans la table ps_zone, la variable "franco" de la zone en question.

 

Ai-je raison ?

Si oui est-ce que quelqu'un peut m'aider à mettre en oeuvre ça ?

 

Merci

Link to comment
Share on other sites

J'ai trouvé le fichier à modifier :

Classes/Cart.php

vers la ligne 2674

        $configuration = Configuration::getMultiple(array(
            'PS_SHIPPING_FREE_PRICE',
            'PS_SHIPPING_HANDLING',
            'PS_SHIPPING_METHOD',
            'PS_SHIPPING_FREE_WEIGHT'
        ));

        // Free fees
        $free_fees_price = 0;
        if (isset($configuration['PS_SHIPPING_FREE_PRICE']))
            $free_fees_price = Tools::convertPrice((float)$configuration['PS_SHIPPING_FREE_PRICE'], Currency::getCurrencyInstance((int)$this->id_currency));
        $orderTotalwithDiscounts = $this->getOrderTotal(true, Cart::BOTH_WITHOUT_SHIPPING, null, null, false);
        if ($orderTotalwithDiscounts >= (float)($free_fees_price) && (float)($free_fees_price) > 0)
        {
            Cache::store($cache_id, $shipping_cost);
            return $shipping_cost;
        }

Comment puis-je modifier la variable PS_SHIPPING_FREE_PRICE par ma nouvelle variable franco de ma table ps_zone ?

 

Merci pour votre aide.

 

 

Link to comment
Share on other sites

  • 4 months later...

J'ai créé un zone avec FRANCE+MONACO+ANDORRE et dans le fichier CART.PHP j'ai modifié la ligne 2682 :

    if (isset($configuration['PS_SHIPPING_FREE_PRICE']))
            $free_fees_price = Tools::convertPrice((float)$configuration['PS_SHIPPING_FREE_PRICE'], Currency::getCurrencyInstance((int)$this->id_currency));
        $orderTotalwithDiscounts = $this->getOrderTotal(true, Cart::BOTH_WITHOUT_SHIPPING, null, null, false);
        if ($orderTotalwithDiscounts >= (float)($free_fees_price) && (float)($free_fees_price) > 0 and $id_zone==6) //and $id_zone==6 rajouté pour le franco uniquement en France
Link to comment
Share on other sites

  • 2 months later...

bonjour

 

On peut faire pareil si on veux le gerer differement la gratuité en fonction du transporteur

 

voila une solution:

 

1 - indiquer a partir de quelle somme les frais de port sont gratuit. (ex : 70€)

2 - Moi j'ai creer un transporteur "TRANS GRATUIT" dont l'identifiant (colonne ID dans les transporteurs) est 6

 

3 - ensuite il faut editer le fichier Classes/Cart.php

 

faire une recherche de "// Free fees" puis trouver les lignes ci-dessous et modifier la derniere ligne

en ajoutant : and $id_carrier==6

6 etant l'ID du transporteur pour lequel on applique la regle de gratuite des frais de port.

 

ainsi les frais de port seront gratuit si le panier depasse 70€ et si on choisi le transporteur TRANS GRATUIT

 

exemple ci dessous:

  if (isset($configuration['PS_SHIPPING_FREE_PRICE']))
            $free_fees_price = Tools::convertPrice((float)$configuration['PS_SHIPPING_FREE_PRICE'], Currency::getCurrencyInstance((int)$this->id_currency));
        $orderTotalwithDiscounts = $this->getOrderTotal(true, Cart::BOTH_WITHOUT_SHIPPING, null, null, false);
        if ($orderTotalwithDiscounts >= (float)($free_fees_price) && (float)($free_fees_price) > 0 and $id_carrier==6) //and $id_carrier==6 rajouté  6 etant l'identifiant du transporteur pour lequel les frais de port doit etre gratuit
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...