Récemment
-
Edition en masse des déclinaisons
Nouvelles fonctionnalités3 -
Thème possible
Questions relatives à l'installation/upgrade2 -
erreurs cleaner
Discussion générale3 -
PaypalAPI erreur
PhenixSuite2 -
Problèmes de prix avec plusieurs devises et PayPal
PhenixSuite1 -
multiples déclinaisons sur produit [RÉSOLU]
Bugs & Améliorations22 -
Thème enfant
PhenixSuite3 -
ONePageCheckout
BUG connus4 -
Informations générales
PhenixSuite2 -
timepicker absent dans le BO
Bugs & Améliorations11 -
Installation Phenixsuite depuis 1.6.1.24
Questions relatives à l'installation/upgrade4 -
Passage au Webp qui n'a pas fonctionné
Bugs & Améliorations11 -
erreur 500 module paypal
Bugs & Améliorations8 -
probleme page de commande ONE PAGE
Bugs & Améliorations3 -
Traduction module Colissimo en admin
Bugs & Améliorations2 -
Erreur module block_cart en php8.2 mais pas en php7.4
Bugs & Améliorations14 -
Bug page de commande
Bugs & Améliorations4 -
Nouveautés possibles ?
Nouvelles fonctionnalités2 -
bug installation bdd
Questions relatives à l'installation/upgrade26 -
Configuration de wamp compatible presta.1.6.1.24 et PhenixSuite 1.6.2.25
Discussion générale61
À partir de (from_price) [RÉSOLU]
-
Bonjour,
J'ai remarqué que la classe Combination retournait $min_attribute sans faire la distinction d'un changement de prix (si toutes les valeurs price sont à 0 ou qu'elles sont les mêmes, il y a quand même un retour). Du fait, des produits déclinés ayants les mêmes prix (couleurs...) ont "à partir de" avant le prix.
-
Ok,
Pour le correctif (qui sera effectif dans la 1.6.2.21)
Modifier la classe Product.php lignes 5410 et suivantes par:$row['from_price'] = false; if(Configuration::get('PS_ATTRIBUTE_CATEGORY_FROM') && $id_product_attribute) { $info_attribute = Combination::getMinProductAttributePrice($row['id_product'], true); if($info_attribute['min'] != $info_attribute['max']) { $row['from_price'] = Tools::ps_round( Product::getPriceStatic( (int)$row['id_product'], true, (int)$info_attribute['id_product_attribute'], 6 ), (int)Configuration::get('PS_PRICE_DISPLAY_PRECISION') ); } }
Et la classe Combination.php, fonction getMinProductAttributePrice() par:
public static function getMinProductAttributePrice($id_product, $with_price = true) { $min_attribute = Db::getInstance()->getRow(' SELECT pa.`id_product_attribute`, pa.`price`, MIN(pa.`price`) as `min`, MAX(pa.`price`) as `max` FROM `'._DB_PREFIX_.'product_attribute` pa '.Shop::addSqlAssociation('product_attribute', 'pa').' WHERE pa.`id_product` = '.(int)$id_product.' order by pa.`price` ASC '); if($min_attribute) { if($with_price) { return $min_attribute; } else { return (int)$min_attribute['id_product_attribute']; } } return 0; }
-
Merci ! Ça fonctionne ! (enfin, l'affichage si prix différents). Par contre ça affiche le prix max, pas le min.
-
Précision : dans les déclinaisons, il se peut (ici c'est le cas) que l'incidence sur le prix soit négative (soustraction). Se peut-il que le calcul soit fait sur la valeur absolue ?
-
Alors on va plutôt se baser sur une autre table.
Essayez ceci:public static function getMinProductAttributePrice($id_product, $with_price = true) { $min_attribute = Db::getInstance()->getRow(' SELECT ai.`id_attribute`, ai.`price`, MIN(ai.`price`) as `min`, MAX(ai.`price`) as `max` FROM `'._DB_PREFIX_.'attribute_impact` ai '.Shop::addSqlAssociation('attribute', 'ai').' WHERE ai.`id_product` = '.(int)$id_product.' order by ai.`price` ASC '); if($min_attribute) { if($with_price) { return $min_attribute; } else { return (int)$min_attribute['id_product_attribute']; } } return 0; }
-
J'ai le bon prix, mais je n'ai plus la mention "À partir de" (la table attribute_impact est vide)
-
les 8.40 d'impact négatif sur le prix sont bien dans la table product_attribute initialement invoquée dans la classe Combination
-
Ok, donc c'était bien la première table qui était la bonne (Attribute_impact n'est utilisée que dans des cas particuliers)
MySQL ne pouvant gérer correctement la combinaison de max/min avec le order by, voici la fonction à utiliser:public static function getMinProductAttributePrice($id_product, $with_price = true) { $attributes = Db::getInstance()->executeS(' SELECT pa.`id_product_attribute`, pa.`price` FROM `'._DB_PREFIX_.'product_attribute` pa '.Shop::addSqlAssociation('product_attribute', 'pa').' WHERE pa.`id_product` = '.(int)$id_product.' ORDER BY pa.`price` ASC '); if($attributes) { $min_attribute = reset($attributes); $max = end($attributes); if($with_price) { $min_attribute['min'] = $min_attribute['price']; $min_attribute['max'] = $max['price']; return $min_attribute; } else { return (int)$min_attribute['id_product_attribute']; } } return 0; }
-
On y est presque, le prix est toutefois affiché TTC sur ces produits-là, alors qu'il est bien HT sur les autres (lorsqu'affiché HT pour ce groupe client).
-
$row['from_price'] = false; if(Configuration::get('PS_ATTRIBUTE_CATEGORY_FROM') && $id_product_attribute) { $info_attribute = Combination::getMinProductAttributePrice($row['id_product'], true); if($info_attribute['min'] != $info_attribute['max']) { $row['from_price'] = Tools::ps_round( Product::getPriceStatic( (int)$row['id_product'], (self::$_taxCalculationMethod == PS_TAX_EXC ? false : true), (int)$info_attribute['id_product_attribute'], 6 ), (int)Configuration::get('PS_PRICE_DISPLAY_PRECISION') ); } }
-
Merci, tout est bon