Jump to content

Shipping cost on product page / frais de livraison sur fiche produit


Recommended Posts

Bonjour

Je recherche une solution capable d'indiquer sur les fiches produits et/ou à côté du prix des produits, le cout de la livraison, sans avoir besoin d'ajouter le produit au panier. Ceci, dans le but que les clients de ma boutique puisse savoir ce qui va réellement leur être facturé sans avoir à ajouter au préalable le produit à leur panier. Merci d'avance.

Hi!

I'm looking for a prestashop solution which would be able to display the shipping cost on the product page or/and next to the product price. The deal would be to let my clients know how much they're gonna pay for the shipping cost, without adding the product to their card... Anyone can help...? Cheers!

Link to comment
Share on other sites

houla

sa m'écrit cela en haut d ela page produits

Carrier Object
(
   [id_tax] => 0
   [name] => Colissimo 
   [url] => http://www.coliposte.net/particulier/suivi_particulier.jsp?colispart=@
   [delay] => Array
       (
           [2] => La date de livraison sera calculée en fonction de votre mode de paiement sur la prochaine page.
           [70] => La date de livraison sera calculée en fonction de votre mode de paiement sur la prochaine page.
       )

   [active] => 1
   [deleted] => 0
   [shipping_handling] => 0
   [range_behavior] => 1
   [is_module] => 0
   [fieldsRequired:protected] => Array
       (
           [0] => name
           [1] => active
       )

   [fieldsSize:protected] => Array
       (
           [name] => 64
       )

   [fieldsValidate:protected] => Array
       (
           [id_tax] => isInt
           [name] => isCarrierName
           [active] => isBool
           [url] => isAbsoluteUrl
           [shipping_handling] => isBool
           [range_behavior] => isBool
       )

   [fieldsRequiredLang:protected] => Array
       (
           [0] => delay
       )

   [fieldsSizeLang:protected] => Array
       (
           [delay] => 128
       )

   [fieldsValidateLang:protected] => Array
       (
           [delay] => isGenericName
       )

   [table:protected] => carrier
   [identifier:protected] => id_carrier
   [id] => 217
   [tables:protected] => Array
       (
       )

)

Link to comment
Share on other sites

Hello,

Pas d'erreur ? tu as éditer ton message ? car dans ma notification j'ai ceci:


houla


apres modif comme indiquer

Fatal error: Call to undefined method Cart::getShippingCost() in
/home/www/5cea2bf9a2756ca123f231183cad41e5/web/product.php on line 117
Link to comment
Share on other sites

Bon ok encore une erreur de ma part (la fatigue quand tu nous tiens..)
Voilà cette fois ça devrai être bon...

Dans product.php Ajouter ou Remplacer

    //~  Natsu: Affiche le prix de la livraison
   $cur = Currency::getCurrency(Configuration::get('PS_CURRENCY_DEFAULT'));
   $carrier_id = Configuration::get(PS_CARRIER_DEFAULT);
   $carrier_price = $cart->getShippingCost(intval($carrier_id), intval($product->id), floatval($product->weight), floatval($product->price));
   $carrier_price = Tools::displayPrice($carrier_price, $cur);

   $smarty->assign(array('carrierprice' => $carrier_price));


Dans classes/Cart.php Ajouter ou Remplacer :

    function getShippingCost($id_carrier = NULL, $id_produit = NULL, $weight = NULL,  $price = NULL, $useTax = true)
   {
       global $defaultCountry;

       if ($this->isVirtualCart())
       {
           return 0;
       }    

       // Start with shipping cost at 0
       $shipping_cost = 0;

       // If no carrier, select default one
       if (!$id_carrier)
       $id_carrier = $this->id_carrier;
       if (empty($id_carrier))
           $id_carrier = Configuration::get('PS_CARRIER_DEFAULT');
           if (!isset(self::$_carriers[$id_carrier]))
               self::$_carriers[$id_carrier] = new Carrier(intval($id_carrier));
           $carrier = self::$_carriers[$id_carrier];
           if (!Validate::isLoadedObject($carrier))
               die(Tools::displayError('Hack attempt: "no default carrier"'));

       if (!$carrier->active)
       {
           return $shipping_cost;
       }

       $id_zone = intval($defaultCountry->id_zone);

       // Select carrier tax
       if ($useTax AND $carrier->id_tax)
       {
           if (!isset(self::$_taxes[$carrier->id_tax]))
           self::$_taxes[$carrier->id_tax] = new Tax(intval($carrier->id_tax));
           $tax = self::$_taxes[$carrier->id_tax];
           if (Validate::isLoadedObject($tax) AND Tax::zoneHasTax(intval($tax->id), intval($id_zone)) AND !Tax::excludeTaxeOption())
           $carrierTax = $tax->rate;
       }

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

       if (isset($configuration['PS_SHIPPING_FREE_PRICE']) AND $price >= floatval($configuration['PS_SHIPPING_FREE_PRICE']) AND floatval($configuration['PS_SHIPPING_FREE_PRICE']) > 0)
       {
           return $shipping_cost;
       }

       if (isset($configuration['PS_SHIPPING_FREE_WEIGHT']) AND $weight >= floatval($configuration['PS_SHIPPING_FREE_WEIGHT']) AND floatval($configuration['PS_SHIPPING_FREE_WEIGHT']) > 0)
       {
           return $shipping_cost;
       }

       // Get shipping cost using correct method
       if ($carrier->range_behavior)
       {
           if ((Configuration::get('PS_SHIPPING_METHOD') AND (!Carrier::checkDeliveryPriceByWeight($carrier->id, $weight, $id_zone))) OR (!Configuration::get('PS_SHIPPING_METHOD') AND (!Carrier::checkDeliveryPriceByPrice($carrier->id, 0, $id_zone))))
           {        
               $shipping_cost += 0;
           }    
           else 
           {
               if (intval($configuration['PS_SHIPPING_METHOD']))
               {
                   $shipping_cost += $carrier->getDeliveryPriceByWeight($weight, $id_zone);
               }
               else
               {
                   $shipping_cost += $carrier->getDeliveryPriceByPrice($price, $id_zone);
               }
           }
       }
       else
       {
           if (intval($configuration['PS_SHIPPING_METHOD']))
           {
               $shipping_cost += $carrier->getDeliveryPriceByWeight($weight, $id_zone);
           }
           else
           {
               $shipping_cost += $carrier->getDeliveryPriceByPrice($price, $id_zone);
           }
       }

       // Apply tax
       if (isset($carrierTax))
       {
           $shipping_cost *= 1 + ($carrierTax / 100);
       }


       // Adding handling charges
       if (isset($configuration['PS_SHIPPING_HANDLING']) AND $carrier->shipping_handling)
       {
           $shipping_cost += floatval($configuration['PS_SHIPPING_HANDLING']);
       }    

       return floatval($shipping_cost);
   }



dans product.tpl rechercher

            {if $priceDisplay == 2}


{convertPrice price=$product->getPrice(false, $smarty.const.NULL, 2)} {l s='tax excl.'}
               {/if}


Ajouter après

               {if $carrierprice}


{l s='Livraison: '}{$carrierprice} {l s='TTC.'}
               {/if}

Link to comment
Share on other sites

humm étrange

replacer

 $carrier_price = $cart->getShippingCost(intval($carrier_id), intval($product->id), floatval($product->weight), floatval($product->price));


par

 $carrier_price = $cart->getShippingCost(intval($carrier_id), intval($product->id), floatval($product->weight), floatval($product->price), false);

Link to comment
Share on other sites

  • 3 months later...

Natsu,

Thank you for this code. I've used it and it works fine but I just have a problem when I change the currency, the shipment cost is not changing and remains in USD (default currency of my shop). What would you suggest to fix this?

you can see it for example on this page:
http://www.carpetview.com/all-carpets/177-kurdish-carpet.html

If you change the currency to Euro, you will still see the shipment cost in USD.

Thanks,
Hakan

Carpetview is specialized in providing best quality oriental rugs and turkish rugs

Link to comment
Share on other sites

en plus... si tu pointes vers un produit qui n'existe pas ;-)

sinon, bonne nouvelle, cher ami. ça marche parfaitement (mauvaise langue !!)

joue un peu à cache-cache ! ça devrait aider.

Edit : ou alors j'ai pas compris l'effet recherché ?

21143_Snz3gj9jJ7Pobl80D254_t

Link to comment
Share on other sites

:lol: c'est vrai qu'en me relisant, ma phrase et ma question toute entière étaient ridicules...bref, je regarde tellement de themes different depuis une heure que je sais plus ce qui est réel ou fictif (site en ligne ou demo de theme). Je t'enverrai une demande d'echange de lien dans un futur proche si tu le veux bien ;-)
Je te souhaite de bonnes ventes et qui sait? Peut qu'un jour tu me compteras parmi tes clients (je montrerai ton site à madame promis ;-P )
Link to comment
Share on other sites

oui je crois que tu n'as pas compris l'effet recherché ! :lol:
Le prix est sensé s'affiché dans la page produit, pour que le client puisse voir les fdp sans forcement ajouter le produit dans le panier (qui a toujours ajouter automatiquement les fdp d'ailleurs, tu ne l'avais pas remarqué? ;-) )

Link to comment
Share on other sites

revois tout ton code (enfin celui que tu as ajouté) : ça m'étonnerait que Natsu ait fait une erreur. ;-)

EDIT : et si tu as un doute, refais la manip avec le thème Presta sans rien changer d'autre : ça devrait fonctionner - si c'est le cas, c'est ton thème qui a un blem.

Link to comment
Share on other sites

C'est ce que je me dis aussi et j'ai refait la manoeuvre plusieurs fois en vain mais là je sature alors je réésayerai demain.
Là je vais dodo parce moi je bosse a 4 h du mat demain :-S
merci pour tout fabrice et bonne nuit.

Link to comment
Share on other sites

Bonjour,

j’ai un problème je n’arrive pas à calculer correctement les frais de port, en back office le frais de port est 6.80 euros + deux euros manutention ce qui fait 8.80 euro.

et dans le Front Office seul les deux euros de Frais de manutention est prise en compte par contre le frais de port du transporteur (6.80) n’est pas prise en compte

voir les images pour voir plus claire

merci beaucoup pour votre aide

21470_ln8YWPzseCZSM98Otg4C_t

21471_C6KVjMAW6Ppdd7RJsYjC_t

21472_aIXkhsQx3iCtxLfFX0Zx_t

21473_joOVc41FQapiCj4vmIdY_t

21474_6zCzjqhgZmOGwqU0Y1kA_t

21475_luKMbtogtVgv0kq9gnuq_t

Link to comment
Share on other sites

lol Fabrice, effectivement le temps passe vite, voir trop vite ^^' et si ça m'arrive quand même de faire des erreurs ^^

zarloon, il semblerai qu'il manque un petit quelque choses ;) dans le code car tu as une erreur .

Pierre bernard, il est possible que ton produit n'est pas de poids ce qui explique qu'il ne rentre pas dans la tranche et lui applique un prix nul.
Je ne pense pas que cela ça du aux modifs.

Thibaut24, de souvenir non mais la prochaine version sera grandement améliorer afin de ne pas bloqué sur les changement de prix ect....

Désolé pour le retard.

Link to comment
Share on other sites

  • 2 weeks later...

Autant pour moi, j'ai dit n'importe quoi, en fait, ca ne fonctionne pas ;)

J'ai quand meme un petit problème.

En fait, j'ai un produit qui fait 2 Km pour un prix de 8,50 Euros. Lorsque j'ajoute ce produit dans le panier, les frais de port son ok mais sur la fiche produit, il m'affiche 3,50 (soit le tarifs minimal...)

As-tu une idée pour résoudre ce problème ?

Merci, à bientôt

Thibaut

Link to comment
Share on other sites

  • 4 weeks later...

Bonjour,
merci à ceux qui ont fait ce développement qui marche parfaitement sur mon site.

Par contre j'aimerais faire une modification. J'offre les frais pe port pour tout panier d'un montant supérieur à 150 €.
Sur la fiche produit, il apparait livraison 0 €, j'aimerais avoir livraison offerte ou gratuite, je pense que c'est plus
"vendeur"
.Si quelqu'un peut m'indiquer comment faire.

merci

Link to comment
Share on other sites

  • 2 weeks later...

Ca pourra peut être en aider certains, car pour ma part impossible de faire fonctionner ce code.

J'ai donc mis directement dans le fichier "product.tpl" :

{if $product->weight ge 0.101 && $product->weight le 0.250 }
{l s='Livraison : '}5,99 €
{/if}
{if $product->weight ge 0.251 && $product->weight le 0.500 }
{l s='Livraison : '}6,80 €
{/if}
{if $product->weight ge 0.501 && $product->weight le 0.750 }
{l s='Livraison : '}7,60 €
{/if}
etc...



Le soucis est que dès qu'un prix de livraison change, il faut le modifier manuellement dans le fichier ;)

@ bientôt

Thibaut

Link to comment
Share on other sites

  • 8 months later...

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