Récemment
-
Aperçu de l'activité dans le dashboard vide
Bugs & Améliorations29 -
Tri par code de réduction (Commandes) [RÉSOLU]
Bugs & Améliorations5 -
Uncaught Error: Call to a member function rowCount() on bool [RÉSOLU]
Bugs & Améliorations4 -
Navigation à facettes
Bugs & Améliorations8 -
Calcul des règles paniers HT/TTC [RÉSOLU]
Bugs & Améliorations44 -
Erreur lors d'une nouvelle installation depuis 0
Questions relatives à l'installation/upgrade24 -
Bug avec le module de paiement epayment
Bugs & Améliorations2 -
Changement statut de commande [RÉSOLU]
Bugs & Améliorations3 -
Prévisions sur le tableau de bord vide [RÉSOLU]
Bugs & Améliorations8 -
Nouvelle attaque ?
Discussion générale10 -
À partir de (from_price) [RÉSOLU]
Bugs & Améliorations11 -
Override AdminCustomersController [RÉSOLU]
Bugs & Améliorations11 -
Logo Phenix erreur 404 en BO
Bugs & Améliorations8 -
Bug Preventing eMail Delivery in at least 1.6.2.16 up to 1.6.2.19 (Probably much more)
Bugs & Améliorations3 -
1.6.2.19 - Erreur sur le module Editeur de page d'accueil
Bugs & Améliorations4 -
warning SQL ( debug activé ) dans Search.php
PhenixSuite6 -
Module PSitechecklist Facilitez la compréhension des retours clients.
Modules1 -
module moneticoPaiement
PhenixSuite2 -
Copieurs-Colleurs
Discussion générale3 -
règle prix catalogue et mise à jour panier
Bugs & Améliorations7
À 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