hajarhh Posted August 29, 2013 Share Posted August 29, 2013 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 Link to comment Share on other sites More sharing options...
hajarhh Posted September 11, 2013 Author Share Posted September 11, 2013 (edited) 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 November 18, 2013 by hajarhh (see edit history) 1 Link to comment Share on other sites More sharing options...
prestashoppeuse Posted November 19, 2013 Share Posted November 19, 2013 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 Link to comment Share on other sites More sharing options...
decome2013 Posted February 25, 2014 Share Posted February 25, 2014 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 Link to comment Share on other sites More sharing options...
SleT Posted February 26, 2014 Share Posted February 26, 2014 Je regarde ça Link to comment Share on other sites More sharing options...
SleT Posted February 26, 2014 Share Posted February 26, 2014 (edited) 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 February 26, 2014 by SleT (see edit history) Link to comment Share on other sites More sharing options...
decome2013 Posted February 26, 2014 Share Posted February 26, 2014 (edited) Double post inutile, voir post ci-dessous Edited February 26, 2014 by decome2013 (see edit history) Link to comment Share on other sites More sharing options...
decome2013 Posted February 26, 2014 Share Posted February 26, 2014 (edited) 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 February 26, 2014 by decome2013 (see edit history) Link to comment Share on other sites More sharing options...
SleT Posted February 26, 2014 Share Posted February 26, 2014 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 € " Link to comment Share on other sites More sharing options...
decome2013 Posted February 26, 2014 Share Posted February 26, 2014 Effectivement ca fonctionne bien, j'avais oublié de sélectionner un transporteur par défaut . 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 Link to comment Share on other sites More sharing options...
SleT Posted February 26, 2014 Share Posted February 26, 2014 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é Link to comment Share on other sites More sharing options...
sangria777 Posted March 17, 2014 Share Posted March 17, 2014 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 !!! 1 Link to comment Share on other sites More sharing options...
sangria777 Posted March 17, 2014 Share Posted March 17, 2014 (edited) Mauvaise piste, voila comment le mettre : (int)Tools::getValue('id_product'); ça fonctionne ! Edited March 17, 2014 by sangria777 (see edit history) Link to comment Share on other sites More sharing options...
Beka Posted May 15, 2014 Share Posted May 15, 2014 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. Link to comment Share on other sites More sharing options...
david chiche Posted May 31, 2014 Share Posted May 31, 2014 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 1 Link to comment Share on other sites More sharing options...
mylesk42 Posted June 9, 2014 Share Posted June 9, 2014 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 Link to comment Share on other sites More sharing options...
tresorsdargan Posted June 15, 2014 Share Posted June 15, 2014 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 Link to comment Share on other sites More sharing options...
mylesk42 Posted June 16, 2014 Share Posted June 16, 2014 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 Link to comment Share on other sites More sharing options...
mylesk42 Posted June 17, 2014 Share Posted June 17, 2014 Pb résolu, certains produits n'avaient pas le Transporteur Par Défaut sélectionné. Link to comment Share on other sites More sharing options...
mylesk42 Posted June 17, 2014 Share Posted June 17, 2014 Bonjour, Quelqu'un a t-il une piste pour l'intégration dans PS 1.4 ? Merci Link to comment Share on other sites More sharing options...
Game Extras Posted May 17, 2015 Share Posted May 17, 2015 (edited) 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 May 17, 2015 by Game Extras (see edit history) Link to comment Share on other sites More sharing options...
Manu-41 Posted February 5, 2020 Share Posted February 5, 2020 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. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now