keikun Posted April 7, 2011 Share Posted April 7, 2011 Bonjour,PRESTASHOP : Version 1.3J'ai une question concernant le Calcul des Frais de transport lors d'un développement d'un Module Transporteur.J'ai remarqué lorsqu'un transporteur était lié à un module, la méthode getOrderShippingCost() de la classe Cart n'est pas appelé.Quelles sont les méthodes à implémenter dans le Module pour renvoyer le montant des frais de ports au panier?Je souhaite dans cette méthode avoir accès au contenu du panier.Si vous avez des pistes, merci d'avance.-- UPDATE Il y a une comportement très étrange dans la gestion des Transporteur de type est "un module".Comment changer le comportement de calcul des frais de port.En creusant, il appel la méthode getDeliveryPriceByPrice() de la classe Carrier.Mais pour cela, il se base sur les données insérée sur le transporteur avant de le considérer comme un module !!Donc comment dire au moteur de prestashop, Le transporteur est un module, vient chercher le montant total sans et avec taxe dans cette méthode (méthode mise dans le module du transporteur)?j'ai vue que sur le module dejala, ils ont créer une classe CarrierHacked.php ?? Merci de votre aide Link to comment Share on other sites More sharing options...
Broceliande Posted April 7, 2011 Share Posted April 7, 2011 Une fois de plus , voir post http://www.prestashop.com/forums/viewthread/101527/developpement/flam_postez_votre_version_de_ps_dans_la_signature_, on ne sais pas si tu parles de la 1.3 ou la 1.4 , les réponses ne sont pas les mêmes. Link to comment Share on other sites More sharing options...
Captain FLAM Posted April 7, 2011 Share Posted April 7, 2011 Merci à toi, Brocéliande de propager cette nouvelle "mode"Tu es un bon disciple ... Faudra que je prenne le temps d'aller poster dans plusieurs sections le lien vers le sujet ... Link to comment Share on other sites More sharing options...
keikun Posted April 7, 2011 Author Share Posted April 7, 2011 En effet, j'aurai du préciser la version Là c'est une question dans le cadre de la version 1.3 Bonne idée la signature, faut-il encore travailler uniquement sur une version Link to comment Share on other sites More sharing options...
Broceliande Posted April 7, 2011 Share Posted April 7, 2011 En effet, j'aurai du préciser la version Là c'est une question dans le cadre de la version 1.3 Bonne idée la signature, faut-il encore travailler uniquement sur une version Héhé j'ai fais la même remarque à captain , du coup si tu es développeur tu mets une plage , (regarde la mienne) , mais en revanche quand tu poses tes questions , pense à préciser Pour répondre à ta question , 1.3 est la mauvaise pioche si ton module de transport doit calculer lui même le tarif livraison.Car il manque la classe faite pour ça de la 1.4abstract class CarrierModuleCore extends Module { abstract function getOrderShippingCost($params,$shipping_cost); abstract function getOrderShippingCostExternal($params); } Ce que tu peux faire dans la 1.3 , c'est avoir un transporteur configuré normalement pour les tranches de tarif etc , mais avec l'option module cochée.Dans ce cas le transporteur ne sera pas affiché par presta mais par le module lui même via le hook extraCarrier.Seulement même si tu modifie le prix d'affichage , il sera recalculé avant l'étape suivante.Dans ce cas tu devra intervenir entre les deux et modifier le total à payer avant qu'il ne soit affichéPrécise un peu ce que tu veux faire, je peux peut être t'aider plus que ça Link to comment Share on other sites More sharing options...
Broceliande Posted April 7, 2011 Share Posted April 7, 2011 j’ai vue que sur le module dejala, ils ont créer une classe CarrierHacked.php ?? mauvaise piste:Dans la 1.3, l'aspect 'module transport' n'est qu'abordé, préparé...Il faut savoir que la methode Carrier::getCarriers retourne seulement les transporteurs 'non module' , et c'est également pour cette raison que le transporteur coché comme tel n'est pas affiché sur la page des transporteurs.Il est pourtant indispensable dans un module associé à un transporteur d'avoir également celui que tu as créé dans le BO et indiqué comme étant un module.Personnellement, dans ce genre de dev , je crée ma propre fonction getCarriers dans mon module.Pour le module déjalà ,ils utilisent une classe Carrier complete modifiée notamment en ce sens. Link to comment Share on other sites More sharing options...
keikun Posted April 7, 2011 Author Share Posted April 7, 2011 Merci Broceliande pour ta réactivité et tes premiers éléments de réponses Pour t'en dire plus comme tu le demande.Je cherche à faire les choses suivantes :- Limiter un transporteur à un pays (c'est la première raison qui m'a poussé à faire mon module transporteur pour afficher le Carrier en fonction du code iso de l'adresse de livraison). Car la gestion de base Zone <- Pays n'est pas suffisant. Mon trasporteur A c'est uniquement pour la france alors que mon transporteur B c'est pour la belgique et le luxembourg et pour finir le transporteur C qui livre tous les pays. Mais les trous pays sont de la même zone.- Calculer le montant HT / TTC des frais de port en fonction du contenu dans le panier (si produit en réduction alors frais de port à 10€ sinon 0€ par exemple) et du pays d'expédition. Au delà de la calculer et de l'afficher dans le choix des transporteurs, il faut que ce même montant soit bien repris dans le panier, total commande, pdf facture, paiement....Pour cela j'ai inspecté tout le code et en effet je me suis rendu compte qu'aucune méthode d'override pour recalculer le prix comme en 1.4 Si j'ai bien compris, dans tous les cas, la méthode qui calcul les frais de livraison passent par getOrderShippingCost(). Ensuite en fonction du mode sélectionné par tranche de prix ou par tranche de poids, cela appel getDeliveryPriceByWeight() et getDeliveryPriceByPrice().Ce qui n'est pas terrible, c'est que lorsque l'on déclare un transporteur en tant que Module, il se base sur ce système et dans l'interface on ne peut même plus affecter des prix au tranche . Cela implique de devoir refaire la gestion des tranches dans mon module de transporteur pour modifier les tables de prix selon tranche La seule solution que j'y voir pour l'instant mais qui est en mon sens très "moche", c'est de faire un Hack dans la méthode getDeliveryPriceByPrice() du cor de prestashop . Peux être auras tu une autre idée J'espère que je suis assez clair sur mon développement, Merci en tout cas. Link to comment Share on other sites More sharing options...
keikun Posted April 7, 2011 Author Share Posted April 7, 2011 Autre information pour la communauté, je trouve la performance de cette partie très médiocre.Pour récupérer le cout du transport, je ne sais pas pourquoi la méthode getOrderShippingCost() est appelé autant de fois et sur tous les transporteurs. Alors qui ne doit charger qu'un prix pour un transporteur dans la partie Résumé du panier. Link to comment Share on other sites More sharing options...
Broceliande Posted April 7, 2011 Share Posted April 7, 2011 Ce que tu veux faire , tu peux alors le faire sans toucher au core.Car en aucun cas dans ce que tu me décris , tu n'as besoin de calculer le prix : c'est 0 ou un tarif classique.J'utilise pour ce genre de chose un module maison nommé hidecarrier , qui me permet de masquer ou afficher un transporteur à loisir, sous conditions, selon la demande du client.Ainsi j'ai un seul transporteur 'Transport Offert', tout à fait normal, avec une seule tranche à 0€, qui ne s'affiche que quand je le décide. je laisse la gratuité des frais de port à 0 dans le BO , bien sûr.Je ne passe pas la propriété module à true , car la plupart du temps , j'ai d'autres conditions à gérer sur d'autres transporteurs.Mon module intervient dans le hookTop et renseigne le tableau smary $visiblecarriers.La seule modif que j'ai à faire est donc de remplacer $carriers par $visiblecarriers dans le foreach de order-carrier.tpl et le tour est joué , je masque à loisir et sous mes conditions les transporteurs que je souhaite. 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