niklos Posted August 25, 2010 Share Posted August 25, 2010 Bonjour à tous,J'ai mis a jour mon prestashop de la version 1.2.5 vers la version 1.3.1 en suivant le tuto disponible sur le site. Mais j'ai un soucis...Depuis la mise a jours, je ne peux plus ajouter de produit au panier car le bouton "ajouter au panier" a disparu (tout comme le champs demandant la qtt a ajouter au panier).J'ai donc regarder un peu le code notament le product.tpl qui contient ceci: {if (!$allow_oosp && $product->quantity != 0) || $virtual} <input type="text" name="qty" id="quantity_wanted" class="text" value="{if isset($quantityBackup)}{$quantityBackup|intval}{else}1{/if}" size="2" maxlength="3" /> {l s='Quantity :'} {else} {/if} donc si j'ai bien compris avant d'afficher la case "quantité a ajouter au panier", il vérifie qu'il reste bien des produits en stock. Par ailleurs il verifie aussi que !$allow_oosp, ce que j'ai pu tester comme ceci: {if (!$allow_oosp)} 1 {/if} et il m'affiche bien 1 dans le code.Donc le pb ne viens pas de !$allow_oospSi je test de la même manière $product->quantity {if ($product->quantity != 0)} 1 {/if} Il ne m'affiche rien.Conclusion, le pb viens de $product->quantity qui est égal à 0.Je regarde donc ma classe product (classes/Product.php) et je trouve ceci: public static function getQuantity($id_product, $id_product_attribute = NULL) { $lang = Configuration::get('PS_LANG_DEFAULT'); if (Pack::isPack(intval($id_product), intval($lang)) AND !Pack::isInStock(intval($id_product), intval($lang))) return 0; $result = Db::getInstance()->GetRow(' SELECT IF(COUNT(id_product_attribute), SUM(pa.`quantity`), p.`quantity`) as total FROM `'._DB_PREFIX_.'product` p LEFT JOIN `'._DB_PREFIX_.'product_attribute` AS pa ON pa.`id_product` = p.`id_product` WHERE p.`id_product` = '.intval($id_product).' '.(isset($id_product_attribute) ? 'AND `id_product_attribute` = '.intval($id_product_attribute) : '').' GROUP BY p.`id_product`'); return $result['total']; } Je vérifie ensuite que dans ma base, le champ "quantity" du produit n'est pas à 0 et ce n'est bien sur pas le cas...Je ne comprend pas où est le problème...Quelqu'un à une idée? Bonne journée à tous!edit:j'ai essayer d'exécuter la requète dans phpmyadmin sous cette form: SELECT IF(COUNT(id_product_attribute), SUM(pa.`quantity`), p.`quantity`) as total FROM `ps_product` p LEFT JOIN `ps_product_attribute` AS pa ON pa.`id_product` = p.`id_product` WHERE p.`id_product` = 37 GROUP BY p.`id_product` J'ai regardé dans la base si le produit ayant l'id 37 était bien en stock (ce qui est le cas car il en reste 182)et la requète me retourne bien 182.J'ai comprend de moins en moins....edit 2:j'avance un peu... et je pense avoir trouvé d'ou viens mon soucis: la classe Pack.php.elle comprend notament ces deux fonctions: public static function getItems($id_product, $id_lang) { if (in_array($id_product, self::$cachePackItems)) return self::$cachePackItems[$id_product]; $result = Db::getInstance()->ExecuteS('SELECT id_product_item, quantity FROM '._DB_PREFIX_.'pack where id_product_pack = '.intval($id_product)); //retourne forcement 1 car c'est ce qu'il y a dans la bdd $arrayResult = array(); foreach ($result AS $row) { $p = new Product($row['id_product_item'], false, intval($id_lang)); $p->pack_quantity = $row['quantity']; $arrayResult[] = $p; } self::$cachePackItems[$id_product] = $arrayResult; return self::$cachePackItems[$id_product]; } public static function isInStock($id_product, $id_lang) { $items = self::getItems(intval($id_product), intval($id_lang)); foreach ($items AS $item) // $item->quantity == 0 dans tous les cas actuellement if ($item->quantity == 0 AND !$item->isAvailableWhenOutOfStock(intval($item->out_of_stock))) return false; //retourne toujours false actuellement return true; } j'ai rajouter des commentaire pour donner les valeur de certain trucs...il me semble que le soucis viens de la première fonctionMais je ne comprend pas tout le code alors un peu difficile de trouver le pb exact! Link to comment Share on other sites More sharing options...
niklos Posted August 26, 2010 Author Share Posted August 26, 2010 Suite du problème:Alors en fait, le soucis viens de $p->pack_quantity = $row['quantity']; qu'ils utilisent dans la première fonction.dans le seconde, on utilise $item->quantity et non $item->pack_quantitydonc si je change ceci: $p->pack_quantity = $row['quantity']; en ceci: $p->quantity = $row['quantity']; ca fonctionne. Mais puis-je me permettre de modifier comme cela une classe?Est ce que ca ne vas pas mettre le bazar ailleurs? Pour terminer, pourquoi suis je le seul a avoir ce problème ? Link to comment Share on other sites More sharing options...
Samoth Posted June 23, 2011 Share Posted June 23, 2011 j'ai le même problème de la 1.3.7 vers la 1.4.2.5as tu réparé ton problème ?mes infos quantité, prix et bouton ajouter ont disparu.merci Link to comment Share on other sites More sharing options...
olivier.lh Posted July 2, 2011 Share Posted July 2, 2011 passe en 1.4.3 ca marche 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