Themesremix Posted December 15, 2009 Share Posted December 15, 2009 La fonction de trie par 'position' créé des doublons dans la table ps_category_product , on se retrouve avec des produits qui ont la même valeur de position. Link to comment Share on other sites More sharing options...
Patric Posted December 15, 2009 Share Posted December 15, 2009 Merci de poster les bugs dans le Bug Tracker. Link to comment Share on other sites More sharing options...
Fabrice Posted December 15, 2009 Share Posted December 15, 2009 une copie écran serait sympa pour étayer cette affirmation ;-) Link to comment Share on other sites More sharing options...
xsch Posted January 3, 2010 Share Posted January 3, 2010 Je confirme malheureusement...Dans la table ps_Category_product, je me retrouve avec des couples (id_cat,position) identiques.Désolé, j'ai modifié la table et je n'ai plus de copie d'écran.Mais même après correction, je ne parviens plus à accéder à certaines catégories depuis le BO. Link to comment Share on other sites More sharing options...
TrogloGeek Posted January 21, 2010 Share Posted January 21, 2010 Je pluscinte, idem, table déjà corrigée manuellement, désolé...Quelqu'un a réussi à savoir quel action provoque ces doublons ? Je n'ai pas réussi à en réobtenir... Link to comment Share on other sites More sharing options...
TrogloGeek Posted January 21, 2010 Share Posted January 21, 2010 Bon, heureusement la cliente elle réussit très bien à faire apparaitre le bug (bien que j'ignore toujours comment).Ci-joint :1- la mise en évidence des incohérences sur la base de données, on y voit une requête de recherche de doublons sur le couple (id_category,position) ainsi que le contenu de la table en elle même.Cette image peut être utilisée pour une soumission de bug sans me demander de permission.requette: SELECT cp1.id_category, cp1.id_product, cp1.`position`, cp2.id_product FROM ps_category_product AS cp1 Inner Join ps_category_product AS cp2 ON cp1.id_category = cp2.id_category AND cp1.id_product < cp2.id_product AND cp1.`position` = cp2.`position` ORDER BY cp1.id_category ASC 2- Une mise en évidence du problème que cela pose sur le back officeCette image peut être utilisée pour une soumission de bug sans me demander de permission. Link to comment Share on other sites More sharing options...
Themesremix Posted January 29, 2010 Author Share Posted January 29, 2010 SVP , est-ce que le problème à été corrigé dans la 1.3 alpha ? merci Link to comment Share on other sites More sharing options...
TrogloGeek Posted February 9, 2010 Share Posted February 9, 2010 une copie écran serait sympa pour étayer cette affirmation ;-) Des retours (même négatifs) seraient sympathiques eux aussi ! Poster une soumission de bug propre prend du temps, et jusqu'ici dans mon cas n'est jamais récompensée... Link to comment Share on other sites More sharing options...
Fabrice Posted February 9, 2010 Share Posted February 9, 2010 qu'est-ce que tu entends par "des retours" ? rapport aux soumissions de bug ? tu as un suivi sur le bug tracker n'est-ce pas ? Link to comment Share on other sites More sharing options...
TrogloGeek Posted February 9, 2010 Share Posted February 9, 2010 Eh bien non, la dernière fois que j'ai lu votre charte, celle ci indiquait qu'il fallait qu'un modérateur valide un bug sur le forum avant qu'on le soumette sur le bug tracker... mais bon, comme il n'y a jamais de réponse ou presque...Pour les autres personnes ayant ce problème :En attendant de trouver où réside le bug, j'ai un petit module permettant de réparer les positionnements de la BDD... Il n'empêche pas la corruption du système de positionnement de revenir ni ne répare sa cause, il ne s'attaque qu'aux effets du bug, c'est à dire aux trous dans le système de positionnement ou aux positions doublonnés. Une foi le script lancé on peut à nouveau manipuler correctement les positions des produits... jusqu'à la prochaine corruption du système ! (après quoi il suffit de recliquer ).C'est juste une rustine, mais ça intéresse quelqu'un ?Moi je suis intéressé par toute information sur le moyen de reproduire le bug (ou toute dénonciation de la classe ou méthode en cause ^^), notre cliente est gênée par ce bug et j'aimerais le résoudre rapidement. (Si je trouve la cause du bug je la soumettrais ici avec le correctif dès qu'il sera prêt). Link to comment Share on other sites More sharing options...
Fabrice Posted February 9, 2010 Share Posted February 9, 2010 je ne vois pas ou tu as pu lire ça...il est question dans mon premier post de poster uniquement des bugs avérés. jamais je n'ai dit que nous les validions.ou alors les conditions sont modifiées et tu me l'apprends. Link to comment Share on other sites More sharing options...
Patric Posted February 9, 2010 Share Posted February 9, 2010 Non, rien n'a été modifié à ce sujet. Il n'y a pas besoin d'autorisation pour poster dans le Bug Tracker. Bien au contraire on encourage à poster là plutôt que dans ce forum.Avant d'y poster il est néanmoins judicieux d'essayer de reproduire le bug en question sur la version SVN, histoire de ne pas faire perdre du temps aux développeurs à essayer de reproduire un bug déjà signalé et corrigé entre-temps, mais rien d'obligatoire. Link to comment Share on other sites More sharing options...
Stéphane Marino Posted February 17, 2010 Share Posted February 17, 2010 Bon j'ai trouvé d'où vient le souci de l'ordre un peu rock'n roll des produits dans les catégories...J'ai téléchargé un prestashop tout propre (1.2.5) et fait des tests sur la catégorie "accueil"Il y a 4 produits : 1-ipod Nano, 2- ipod Shuffle, 6-Macbook, 7-iPod touchJe les ai mis dans cet ordre :id_product / position1 02 16 27 3Si j'édite et enregistre le produit 6, on se retrouve avec :id_product / position1 02 16 27 2Si j'édite et enregistre le produit 2 (en partant de la position de départ), on se retrouve avec :id_product / position1 02 16 17 2Si j'édite et enregistre le produit 1 (en partant de la position de départ), on se retrouve avec :id_product / position1 02 06 17 2En fait, ça décale tous les produits qui sont après celui édité.Le problème vient de la fonction deleteCategories (classes/Product.php ligne 475) qui est appelée à chaque fois et qui supprime le produit de la table category_product puis remet tous les autres dans l'ordre... ce qui explique que tous les produits suivants sont décales d'une place vers le haut.Et comme le produit édité est réinséré ensuite avec son ancien numéro de position, ça crée un doublonLa solution est donc de ne pas toucher aux catégories du produit que l'on édite.J'ai modifié le fichier Product.php ligne 456 (updateCategories):Avant : $this->deleteCategories(); $productCats = array(); foreach ($categories AS &$categorie) $categorie = intval($categorie); Apres : $productCats = array(); foreach ($categories AS &$categorie) $categorie = intval($categorie); $this->deleteCategories($categories); puis la fonction deleteCategories ligne 475Avant : public function deleteCategories() { $result = Db::getInstance()->Executes('SELECT `id_category` FROM `'._DB_PREFIX_.'category_product` WHERE `id_product` = '.intval($this->id)); $return = Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'category_product` WHERE `id_product` = '.intval($this->id)); foreach($result AS $row) $this->cleanPositions(intval($row['id_category'])); return $return; } Après : public function deleteCategories($categoryNotToClean=array()) { $result = Db::getInstance()->Executes('SELECT `id_category` FROM `'._DB_PREFIX_.'category_product` WHERE `id_product` = '.intval($this->id)); $return = Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'category_product` WHERE `id_product` = '.intval($this->id)); foreach($result AS $row) if(!in_array(intval($row['id_category']), $categoryNotToClean)) $this->cleanPositions(intval($row['id_category'])); return $return; } Voilà... j'espère que ça en aidera quelques-uns !En tous cas je suis fan de cette solution e-commerce, bien écrite, complète et TRES performante Link to comment Share on other sites More sharing options...
Yoya Posted February 17, 2010 Share Posted February 17, 2010 Merci pour ta solution Stéphane et à l'initiateur du sujet.Cdlt,Pierre. Link to comment Share on other sites More sharing options...
TrogloGeek Posted February 18, 2010 Share Posted February 18, 2010 Thanks alot, I love you Stephane !!!lolTu me retires une sacrée épine du pied car j'avais éliminé l'édition de produit comme étant la source du problème, je risquais donc de chercher longtemps :s... (j'ai surement du tester en éditant un produit en dernière position, ce qui expliquerait que cela n'ait pas généré de corruption de la table).D'accord avec toi pour Prestashop, avant je bossais avec osCommerce, quelle galère, depuis que je suis passé à Prestashop c'est devenu un loisir !J'aime beaucoup l'architecture des modules, pas besoin de toucher aux fichiers Core comme sous osCommerce... (pire encore qu'osCommerce, j'utilisais CRELoaded: payant et buggé jusqu'à la moelle, franchement les bugs de prestashop c'est rien à coté !!!)@Fabrice:Désolé, mauvaise lecture de la charte que je viens de relire, my fault... Par contre chose que je ne suis tjs pas sur d'avoir compris : Est-on obligé de poster dans un autre forum à propos du "bug" ou "suspicion de bug" avant de poster ici ? Car je l'ai déjà fait par deux fois je crois (une fois pour la variable LC_TIME et l'autre je ne sais plus) sans aucune réponse... Link to comment Share on other sites More sharing options...
Whiroph Posted February 25, 2010 Share Posted February 25, 2010 Simple script for resolve the product bugged ^^ <?PHP $conn = mysql_connect('localhost', 'root', 'root') or die ('Error connecting to mysql'); mysql_select_db('ps', $conn); $query_c = "SELECT id_category FROM `category` ORDER BY `id_category`"; $result_c = mysql_query($query_c); while($row_c = mysql_fetch_array($result_c, MYSQL_ASSOC)){ $query_cp = "SELECT * FROM `category_product` WHERE `id_category` = '".$row_c['id_category']."' ORDER BY `id_product`"; $result_cp = mysql_query($query_cp); $i = 0; while($row_cp = mysql_fetch_array($result_cp, MYSQL_ASSOC)){ $query = "UPDATE `category_product` SET `position`='".$i."' WHERE (`id_category`='".$row_cp['id_category']."') AND (`id_product`='".$row_cp['id_product']."')"; mysql_query($query); $i++; } } mysql_free_result($result_c); mysql_free_result($result_cp); mysql_close($conn); ?> Link to comment Share on other sites More sharing options...
TrogloGeek Posted February 26, 2010 Share Posted February 26, 2010 @Stephane :Il me semble que pour parfaire la propreté de ta modification il faut ajouter l'IGNORE flag à l'INSERT de la fin de updateCategories.Cordialement, Damien. 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