Jump to content
hajarhh

Afficher les frais de livraison sur la fiche produit

Recommended Posts

Bonjour,

 

J'ai besoin d'afficher les frais de port pour chaque produit sur sa fiche de description.

Ces frais correspondent à l'un de mes transporteurs ( considéré transporteur par défaut).

Ma configuration des transporteurs est définie par tranches de poids.

J'utilise prestashop 1.5.4.1

 

Merci

Share this post


Link to post
Share on other sites

Je vais répondre à ma question si jamais quelqu'un aurait besoin de la solution:
 Dans le fichier product.php, j'ai crée une nouvelle fonction pour calculer les frais de port du transporteur et de la zone définis par défaut

public function getShippingCosts()
    {
          
          $id_carrier = Configuration::get('PS_CARRIER_DEFAULT');
          $carrier = new Carrier((int)($id_carrier), Configuration::get('PS_LANG_DEFAULT'));
          $carrierTax = Tax::getCarrierTaxRate((int)$carrier->id, (int)$this->{Configuration::get('PS_TAX_ADDRESS_TYPE')});
          $defaultCountry = new Country(Configuration::get('PS_COUNTRY_DEFAULT'), Configuration::get('PS_LANG_DEFAULT'));
          $id_zone = (int)$defaultCountry->id_zone;
          $shipping = $carrier->getDeliveryPriceByWeight($this->weight, $id_zone)*1;
          $shipping = $shipping *(1+ $carrierTax/100);
          return $shipping;
        
    }

Les frais de port sont donc enregistrés dans la variable $shipping

Puis, dans le fichier ProductController.php, j'ai inséré le code suivant sous la fonction : protected function assignPriceAndTax()

$shipping = $this->product->getShippingCosts();
$this->context->smarty->assign('shipping', $shipping);

dans le fichier product.tpl (de votre thème sous le répertoire "themes"), il suffit d'insérer le bloc affichant cette variable là on l'on veut sur la fiche produit:

<p class="shipping">{l s='Shipping fees: '}
<span id="shipping_costs">{convertPrice price=$shipping}</span>
</p>
Edited by hajarhh (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

Bonjour,

Super, cette astuce! Mais pour moi, ça ne fonctionne pas. Dès que je modifie ProductController.php, j'ai une page blanche!
Tu ajoutes bien le code dans la fonction assignPriceAndTax()?
 

Merci

Share this post


Link to post
Share on other sites

Voulant exactement la meme chose, j'ai tenté, et je regarde le meme probleme que le post ci-dessus = page blanche dès que j'ajoute le code a productcontroller, un petit coup de pouce du posteur initial ou de quelqu'un qui passe par là ?

merci beaucoup ;)

Share this post


Link to post
Share on other sites

Bon, j'me suis bien cassé la tête pendant une heure et demi, mais il y avait pas mal de détails à modifier & à comprendre.

 

Alors premièrement, cette modification n'est valable que pour PS 1.5x.

 

Secondairement, j'ai préféré mettre les modifications dans des overrides pour récupérer les modifications en cas de changement de versions (toujours penser à ça :) )

 

Création d'un controller dans override\controllers\front appelé : ProductController.php

<?php

class ProductController extends ProductControllerCore
{
	protected function assignPriceAndTax() {
		parent :: assignPriceAndTax();
		$shipping = $this->product->getShippingCosts();
		$this->context->smarty->assign('shipping', $shipping);
	}
}

Création d'une classe dans override\classes appelée : Product.php

<?php

class Product extends ProductCore
{
	public function getShippingCosts()
    {
          
          $id_carrier = Configuration::get('PS_CARRIER_DEFAULT');
          $carrier = new Carrier((int)($id_carrier), Configuration::get('PS_LANG_DEFAULT'));
	$context = Context::getContext();
	$id_delivery = (int)$context->cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')};
          $carrierTax = Tax::getCarrierTaxRate((int)$carrier->id, $id_delivery);
          $defaultCountry = new Country(Configuration::get('PS_COUNTRY_DEFAULT'), Configuration::get('PS_LANG_DEFAULT'));
          $id_zone = (int)$defaultCountry->id_zone;
          $shipping = $carrier->getDeliveryPriceByWeight($this->weight, $id_zone)*1;
          $shipping = $shipping *(1+ $carrierTax/100);
          return $shipping;
    }
}

Ajout du code dans le product.tpl de votre thème 

<p class="shipping">{l s='Shipping fees: '}
<span id="shipping_costs">{convertPrice price=$shipping}</span>
</p>
Edited by SleT (see edit history)

Share this post


Link to post
Share on other sites

J'ai modifié le fichier config.ing.php pour activer l'affichage des erreurs, voici l'ereur de la page blanche (page produit) :

 

Fatal error: Call to undefined method Product::getShippingCosts() in /home/mondomaine/public_html/override/controllers/front/ProductController.php on line 7

 

Une idée de ce qui bloque siouplé ?

 

EDIT : Bon en fait ca fonctionne. J'étais trop impatient mais il faut bien faire les 3 modifs avant d'essayer de rafraichir la page produit ^^

 

Par contre ca ne fonctionne pas chez moi comme je le voudrais. Tout s'affiche à 0€, je ne comprend pas réellement la raison. Surement à cause de mon fonctionnement :

Plusieurs transporteurs mais un seul transporteur sélectionné dans la liste "Transport" des fiches produits. Après, fonctionnement au poids pour choix de la tranche dans ce transporteur.

Du coup, la fonction de la modif doit uniquement affiché le prix d'un seul transporteur par défaut. Etant hors tranche puisque non configuré, ca affiche 0€.

Bref, bien dommage car ca fonctionne. Un grand merci pour le temps passé à SleT  :)

Edited by decome2013 (see edit history)

Share this post


Link to post
Share on other sites

Chez moi ça marche nickel.

 

Vérifie bien que tu as bien un poids sur ton article, que les tranches de prix / poids soient configurées correctement sur ton transporteur. 

 

Que ton transporteur par défaut soit bien le bon.

 

De plus, j'ai la sensation que  " $id_carrier = Configuration::get('PS_CARRIER_DEFAULT'); " peut renvoyer un transporteur avec un flag delete (qui n'est donc plus actif).

 

Chez moi : " Shipping fees: 41,86 € "

Share this post


Link to post
Share on other sites

Effectivement ca fonctionne bien, j'avais oublié de sélectionner un transporteur par défaut :rolleyes: .

 

Le souci chez moi est que le transporteur par défaut n'est pas disponible pour certains produits . Ca représente 15% de mes produits mais ca pose quand meme un souci puisque ca affiche un prix lié au transporteur par défaut, qui n'est pas le bon, loin de là  :(

 

Encore une fois cela vient de mon probleme de fonctionnement, je ne sélectionne qu'un seul transporteur dans la liste de l'onglet transport dans la création des fiches produits.

Du coup, même si le transporteur par défaut n'est pas sélectionné pour certains produits, le prix du transport avec ce dernier s'affiche quand même sur la fiche du produit, se base sur les tranches de poids et est complètement faux.

 

Doit y'avoir moyen de pouvoir masquer le montant du transport pour les produits qui n'utilisent pas le transporteur par défaut, ou même se baser sur la meme fonction que lors de l'ajout au panier pour afficher les bons frais de port peu importe le transporteur utilisé, mais bon je m'arrête la pour les questions je vais plutot faire appel à un dev ^^

 

merci en tout cas pour ton travail car sur le fond, avec un seul transporteur, ca fonctionne au poil  ;)

Share this post


Link to post
Share on other sites

je pense qu'il faut juste voir si tu peux récupérer en paramètre l'id produit, dans la fonction, vérifier le transporteur par défaut, et utiliser celui ci en priorité

Share this post


Link to post
Share on other sites

Ouha ! Ce post m'a permis de comprendre les crontroler et class, c'est génial !

 

Je relance pour voir si on peux me guider sur la récupération de id produit...

 

Je pense que ça se passe pas ici :

class ProductController extends ProductControllerCore
{
	protected function assignPriceAndTax($id_product) {
		parent::assignPriceAndTax();
		$shipping = $this->product->getShippingCosts($id_product);
		$this->context->smarty->assign('shipping', $shipping);
	}
}

Il faut envoyer l'id_produit à la fonction getShippingCosts

 

Dans le debug je vois que ça s'appelle $id_product

 

Mais si je met simplement cet élément ça ne fonctionne pas !

 

Comment récupérer la variable existante à cet endroit ?

 

Merci pour votre aide !!!

  • Like 1

Share this post


Link to post
Share on other sites

Bonjour,

 

après modifications faites, je confirme que ça fonctionne parfaitement sur PS 1.6 :)

Un grand Merci à hajarhh pour avoir partagé ces modifications et à SleT pour les améliorations apportées à celles-ci.

Share this post


Link to post
Share on other sites

Bonjour à tous

 

Deja merci pour ce travail de qualité et fonctionnel.

 

Votre solution fonctionne chez moi uniquement si j'affecte un transporteur par default, mon parametrage transporteur par default été sur "le meilleur prix" cela me renvoyé la valeur "0", en affectant un transport les prix s'affiche bien. Ces dommage ne pas pourvoir laissé prestashop choisir le meilleur transport par default avec votre superbe code.

 

J'aimerai que vote astuce puisse affichez les port gratuit des x€ que j'ai parametre dans les reglage et dans les regle de panier.

 

J'ai essayer de comprend comment focntionne le module "frais de livraison" qui lui arrive à gere les regle de panier et l'option frais de port. Mais malheusement je suis novice et la je bug....

 

Je m'explique, actuellement j'offre les frais de port des 69€, mais les produit ayant une valeur egal ou superieur n'affiche pas "livraison gratuit" à la place du prix avec vous solution. Le montant des frait de port reste affiche quelque soit mais recherche ou modification.

 

Quelqu'un aurait un idée pour que cette superbe astuce puisse prendre en compte les regle de panier et le parametrage "livraison gratui" s'il vous plait.

 

 

Merci d'avance pour les retour.

 

Version Prestashop 1.6.0.6

  • Like 1

Share this post


Link to post
Share on other sites

Bravo et merci pour ce code offert.

Une remarque : le prix de la livraison peut changer une fois le compte créé ou le client connecté, donc les frais de port affichés sur la fiche produit peuvent ne pas égaux au prix final.

Ne serait-il pas préférable d'afficher un tableau récap sur la fiche produit à lire avec le client (cf http://www.prestashop.com/blog/fr/loi-hamon-les-questions-les-plus-recurrentes-de-nos-e-commercants-au-cabinet-davocats-haas-expert-en-e-commerce/)

 

Merci

Share this post


Link to post
Share on other sites

Bonjour,

 

Suite à la rectification de la portion de code ci-dessous,

 

Mauvaise piste, voila comment le mettre : (int)Tools::getValue('id_product');

ça fonctionne !

 

Ou faut il l'insérer ou le greffer dans le code ?

 

Ouha ! Ce post m'a permis de comprendre les crontroler et class, c'est génial !

 

Je relance pour voir si on peux me guider sur la récupération de id produit...

 

Je pense que ça se passe pas ici :

class ProductController extends ProductControllerCore
{
	protected function assignPriceAndTax($id_product) {
		parent::assignPriceAndTax();
		$shipping = $this->product->getShippingCosts($id_product);
		$this->context->smarty->assign('shipping', $shipping);
	}
}

Il faut envoyer l'id_produit à la fonction getShippingCosts

 

Dans le debug je vois que ça s'appelle $id_product

 

Mais si je met simplement cet élément ça ne fonctionne pas !

 

Comment récupérer la variable existante à cet endroit ?

 

Merci pour votre aide !!!

 

 

merci de vos lumières...

 

Olivier

Share this post


Link to post
Share on other sites

Bonjour,

J'ai toujours le même la même estimation de prix quel que soit la fiche produit et son poids.

Il va chercher le transporteur par défaut et la 1ère tranche seulement où il navigue suivant les tranches ?

Dans quel fichier se trouve la fonction getDeliveryPriceByWeight d'ailleurs ?

 

Merci

Share this post


Link to post
Share on other sites

Pb résolu, certains produits n'avaient pas le Transporteur Par Défaut sélectionné.

Share this post


Link to post
Share on other sites

Bonjour,

Quelqu'un a t-il une piste pour l'intégration dans PS 1.4 ?

Merci

Share this post


Link to post
Share on other sites

Bonjour tout monde  

je suis sur la version 16.14 Prestashop 

Je voudrais savoir quoi faire 

Pour faire en sort de voir mes prix de livraison sur chaque produit 

Merci d’avance 

www.jeuxextras.com

Edited by Game Extras (see edit history)

Share this post


Link to post
Share on other sites

Bonjour,

je déterre ce sujet, car j'ai besoin d'afficher les frais de livraison les moins cher sur mes fiches produits.

Exemple: Livraison à partir de: ..€

Une piste pour presta 1.6.1  ?

merci pour votre aide.

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More