mexique1 Posted September 3, 2011 Share Posted September 3, 2011 Salut ! Je souhaite modifier le prix des produit en fonction de divers critères complexes, d'un manière plus globale qu'avec des déclinaisons, par exemple. Je n'ai pas de problèmes pour mettre en place l'algorithme permettant de calculer le prix, mais par contre je ne vois pas trop où intervenir pour modifier le prix ! Faut-il surcharger la méthode Product :: getPriceStatic et/ou Product ::priceCalculation ? Les overrides fonctionnent-ils avec les méthodes statiques ? Bien évidemment, il faut que cette modification du prix soit visible sur le front, dans la commande, dans les factures, etc... Merci pour vos lumières. Link to comment Share on other sites More sharing options...
mexique1 Posted September 5, 2011 Author Share Posted September 5, 2011 Bon, je me réponds à moi-même... On peut donc étendre la classe ProductCore et surcharger la méthode statique getPriceStatic() et ses... 14 paramètres (!!!). Elle est elle-même appelée par la méthode d'instance getPrice(), donc c'est central. Par exemple, pour mettre tout à 1€ : class Product extends ProductCore { public static function getPriceStatic( $id_product, $usetax = true, $id_product_attribute = NULL, $decimals = 6, $divisor = NULL, $only_reduc = false, $usereduc = true, $quantity = 1, $forceAssociatedTax = false, $id_customer = NULL, $id_cart = NULL, $id_address = NULL, &$specificPriceOutput = NULL, $with_ecotax = TRUE) { return ((float) 1.0); } } Cependant, en traçant les appels de cette méthode avec de simples echo, on voit que (sur les listes de produits, du moins) la méthode est appelée plusieurs fois, avec les paramètres qui changent : id_product = 5643 usetax = id_product_attribute = decimals = 6 divisor = only_reduc = usereduc = 1 quantity = 1 forceAssociatedTax = --- id_product = 5643 usetax = 1 id_product_attribute = decimals = 2 divisor = only_reduc = usereduc = 1 quantity = 1 forceAssociatedTax = --- id_product = 5643 usetax = 1 id_product_attribute = decimals = 6 divisor = only_reduc = usereduc = quantity = 1 forceAssociatedTax = --- id_product = 5643 usetax = id_product_attribute = 0 decimals = 6 divisor = only_reduc = 1 usereduc = 1 quantity = 1 forceAssociatedTax = 1 (Vide signifie false ou null, comme vous le savez) On voit donc que la méthode est appellée 4 fois... On comprend bien à quoi sert le paramètre $usetax (prix TTC ou HT), mais par contre on a du mal à comprendre la signification des paramètres $only_reduc, $usereduc et $forceAssociatedTax... De plus, si on met tous les produits à 1€ comme dans l'exemple ci-dessus, on voit "PRIX REDUIT" sur la page catégorie, sur la page produit c'est l'ancien prix qui est affiché, mais ça s'ajoute bien à 1€ dans le panier... Bref y a-t-il quelqu'un pour démêmer ce plat de spaghettis ? ;-) Link to comment Share on other sites More sharing options...
mexique1 Posted September 5, 2011 Author Share Posted September 5, 2011 Mwarf, même en mettant tout à 999€, ça affiche "PRIX REDUIT" :-D Link to comment Share on other sites More sharing options...
mexique1 Posted September 18, 2011 Author Share Posted September 18, 2011 Toujours tout seul, snif... Bon au final, le comportement bizarre était dû à un bug dans la classe ProductCore => http://forge.prestashop.com/browse/PSCFI-3425 Une fois le bug corrigé, Product :: getPriceStatic() fonctionne comme prévu. 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