guyk Posted February 25, 2009 Share Posted February 25, 2009 hack de quelques lignes de code, à nettoyer et configurabiliser, mais ça marche, j'ai modifié le module blockcategories pour afficher un niveau de produit sous les categories(c'est pour une boutique où il y a très peu de produits)I hacked blockcategories module to display products under the categories (for veryfew products stores) function getTree($resultParents, $resultIds, $id_category = 1, $currentDepth = 0) { ... if (!isset($resultIds[$id_category])) return false; if (substr($id_category,0,1)=='p') //product hack return array('id' => $id_category, 'link' => $link->getProductLink(substr($id_category,1),$resultIds[$id_category]['link_rewrite'], $resultIds[$id_category]['category']), 'name' => $resultIds[$id_category]['name'], 'desc'=> $resultIds[$id_category]['description'], 'children' => null); return array('id' => $id_category, 'link' => $link->getCategoryLink($id_category, $resultIds[$id_category]['link_rewrite']), 'name' => Category::hideCategoryPosition($resultIds[$id_category]['name']), 'desc'=> $resultIds[$id_category]['description'], 'children' => $children);//normal category } $result = Db::getInstance()->ExecuteS(' SELECT * FROM '._DB_PREFIX_.'product p LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (p.id_product = pl.id_product AND id_lang = '.intval($params['cookie']->id_lang).') WHERE p.active = 1 ORDER BY pl.name ASC'); foreach ($result as $row) { //$row['name'] = Category::hideCategoryPosition($row['name']); $id_parent=$row['id_category_default']; $row['id_category']="p".$row['id_product']; $resultParents[$id_parent][] = $row; $resultIds[$row['id_category']] = $row; } surprisingly nothing else to change blockcategories.php Link to comment Share on other sites More sharing options...
guyk Posted March 6, 2009 Author Share Posted March 6, 2009 added other dirty hack lines to keep the menu open // ajout pour garder le menu ouvert sur le produit sélectionnéblockcategories.php line 139 if (isset($_GET['id_category'])) $smarty->assign('currentCategoryId', intval($_GET['id_category'])); if (isset($_GET['id_product'])) //product hack $smarty->assign('currentCategoryId', 'p'.intval($_GET['id_product'])); blockcategories.php Link to comment Share on other sites More sharing options...
kelcible Posted June 19, 2009 Share Posted June 19, 2009 super c'est exactement ce que je cherchais à faire !par contre ne pas oublier de définir la catégorie par défaut de chaque produitsje me suis retrouvée avec la liste des produits après la liste des catégories car j'avais tout par défaut à 1 (id_category_default) = accueil Link to comment Share on other sites More sharing options...
guyk Posted June 19, 2009 Author Share Posted June 19, 2009 normalement ça ne devrait pas, ça crée un arbre cat1->cat2->cat3->produitsah peyt etre que dans ton cas tu as des produits dans les categories intermediaires (comme cat2) ?.....mais comme ça se base sur category_default il faut vérifier que tes produits ont bien la categorie par defaut = la cat ou tu veux les afficher, et mettre les categories intermediaires avec les machins à cocher (ps_product_category)liste des produits avec un mauvais category_default SELECT id_product,id_category_default,reference FROM ps_product p WHERE id_category_default=1 OR id_category_default is null OR id_category_default not in (select c.id_category from ps_category_product c where p.id_product=c.id_product) ça doit etre ça le pb Link to comment Share on other sites More sharing options...
Julio_EH Posted July 12, 2009 Share Posted July 12, 2009 Salut,Tout d'abord merci pour ce hack car ça fait un petit moment que j'essaie de faire ça, mais mes connaissances étant assez limitées, ben c'est pas facile facile.Bref, actuellement la structure html générée est du genre : catégorie 1 produit 1 produit 2 catégorie 2 produit 1 produit 2 et donc les catégories et les produits sont au même niveau.Comment faire donc pour avoir soit cette structure : catégorie 1 produit 1 produit 2 catégorie 2 produit 1 produit 2 ou celle ci : catégorie 1 produit 1 produit 2 catégorie 2 produit 1 produit 2 me permettant donc de distinguer mes produits de mes catégories.Merci d'avance,Julien Link to comment Share on other sites More sharing options...
Julio_EH Posted July 16, 2009 Share Posted July 16, 2009 Re,Bon faut croire que tout le monde fait le pont , personne pour m'expliquer comment faire ma liste ?Autre souci, comme Kelcible j'ai la liste des produits après celle des catégories, par contre mes produits sont bien assignés à une catégorie qui n'est pas accueil.Des idées ?Merci d'avance,Julien Link to comment Share on other sites More sharing options...
Julio_EH Posted July 16, 2009 Share Posted July 16, 2009 Arf autant pour moi, Non seulement j'avais mal assigné mes produits à mes catégories (j'avais juste vu la case à cocher "catalogue", et pas la liste déroulante avec écrit "catégorie par défaut", surement trop bien affiché, pas l'habitude que ce soit si évident lol), mais du coup ça me donne l'arborescence dont j'avais besoin pour mon design.Bref je m'en vais de ce pas m'autoflageller.Julien Link to comment Share on other sites More sharing options...
laurent0384 Posted July 30, 2010 Share Posted July 30, 2010 Bonjour,Merci pour ce script.j'aurais juste une question d'adaptation, actuellement, la liste des produits sous les catégories est classée par ordre alphabétique, y a t'il un moyen de les classer dans l'ordre de position choisit dans l'administration ?Merci pour vos réponses. Link to comment Share on other sites More sharing options...
laurent0384 Posted November 29, 2010 Share Posted November 29, 2010 Bonjour,Le script est bien fonctionnel, par contre, impossible de jouer sur la position des produits dans la listes ?? (ne fonctionne ni avec le classement par date, ni avec les flèches de position dans le Back Office...)Quelqu'un pourrait m'aider sur la modification à effectuer dans le script ?MerciLaurent Link to comment Share on other sites More sharing options...
Jovicyr Posted June 3, 2011 Share Posted June 3, 2011 Bonjour,Ce script fonctionnait jusqu'à présent pour la version 1.4.0.17, mais je viens de passer en 1.4.2(.5) et là ça n'a plus l'air de fonctionner : aucune erreur affichée, juste le fait que plus aucun produit ne s'affiche dans ce block.Surement que certains éléments ont changés avec cette mise à jour. Savez-vous comment le faire fonctionner à nouveau ?Vous remerciant pour vos réponses, Link to comment Share on other sites More sharing options...
Michel92 Posted August 4, 2011 Share Posted August 4, 2011 Bonjour, J'ai ajouté/supprimé les lignes de code suivantes dans blockcategories.php (Cf. PJ) : - Ajout dans 'public function getTree' public function getTree($resultParents, $resultIds, $maxDepth, $id_category = 1, $currentDepth = 0) { global $link; $children = array(); if (isset($resultParents[$id_category]) AND sizeof($resultParents[$id_category]) AND ($maxDepth == 0 OR $currentDepth < $maxDepth)) foreach ($resultParents[$id_category] as $subcat) $children[] = $this->getTree($resultParents, $resultIds, $maxDepth, $subcat['id_category'], $currentDepth + 1); if (!isset($resultIds[$id_category])) return false; if (substr($id_category,0,1)=='p') //product hack return array('id' => $id_category, 'link' => $link->getProductLink(substr($id_category,1),$resultIds[$id_category]['link_rewrite'], $resultIds[$id_category]['category']), 'name' => $resultIds[$id_category]['name'], 'desc'=> $resultIds[$id_category]['description'], 'children' => null); return array('id' => $id_category, 'link' => $link->getCategoryLink($id_category, $resultIds[$id_category]['link_rewrite']), 'name' => $resultIds[$id_category]['name'], 'desc'=> $resultIds[$id_category]['description'], 'children' => $children); } - Suppression dans 'public function hookLeftColumn' foreach ($result as &$row) { $resultParents[$row['id_parent']][] = &$row; $resultIds[$row['id_category']] = &$row; } - Ajout dans 'public function hookLeftColumn' $result = Db::getInstance()->ExecuteS(' SELECT * FROM '._DB_PREFIX_.'product p LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (p.id_product = pl.id_product AND id_lang = '.intval($params['cookie']->id_lang).') WHERE p.active = 1 ORDER BY pl.name ASC'); foreach ($result as $row) { $id_parent=$row['id_category_default']; $row['id_category']="p".$row['id_product']; $resultParents[$id_parent][] = $row; $resultIds[$row['id_category']] = $row; } Cependant, un de mes produit s'affiche en bas (alors que j'ai bien mis la Catégorie par défaut (Cf. PJs) Configuration : Prestashop 1.4.3 Merci d'avance pour vos retours. blockcategories.php Link to comment Share on other sites More sharing options...
Michel92 Posted August 4, 2011 Share Posted August 4, 2011 En fait, dans l'exemple ci-dessus, je n'ai pas supprimé foreach ($result as &$row) { $resultParents[$row['id_parent']][] = &$row; $resultIds[$row['id_category']] = &$row; } Link to comment Share on other sites More sharing options...
huhamanu Posted September 9, 2011 Share Posted September 9, 2011 Hello, Merci pour ta contribution Michel92 mais je constate qu'elle ne permet pas d'afficher les sous-catégories. As-tu une solution pour ça? Link to comment Share on other sites More sharing options...
makinero Posted September 16, 2011 Share Posted September 16, 2011 Bonjour, J'ai ajouté/supprimé les lignes de code suivantes dans blockcategories.php (Cf. PJ) : - Ajout dans 'public function getTree' public function getTree($resultParents, $resultIds, $maxDepth, $id_category = 1, $currentDepth = 0) { global $link; $children = array(); if (isset($resultParents[$id_category]) AND sizeof($resultParents[$id_category]) AND ($maxDepth == 0 OR $currentDepth < $maxDepth)) foreach ($resultParents[$id_category] as $subcat) $children[] = $this->getTree($resultParents, $resultIds, $maxDepth, $subcat['id_category'], $currentDepth + 1); if (!isset($resultIds[$id_category])) return false; if (substr($id_category,0,1)=='p') //product hack return array('id' => $id_category, 'link' => $link->getProductLink(substr($id_category,1),$resultIds[$id_category]['link_rewrite'], $resultIds[$id_category]['category']), 'name' => $resultIds[$id_category]['name'], 'desc'=> $resultIds[$id_category]['description'], 'children' => null); return array('id' => $id_category, 'link' => $link->getCategoryLink($id_category, $resultIds[$id_category]['link_rewrite']), 'name' => $resultIds[$id_category]['name'], 'desc'=> $resultIds[$id_category]['description'], 'children' => $children); } - Suppression dans 'public function hookLeftColumn' foreach ($result as &$row) { $resultParents[$row['id_parent']][] = &$row; $resultIds[$row['id_category']] = &$row; } - Ajout dans 'public function hookLeftColumn' $result = Db::getInstance()->ExecuteS(' SELECT * FROM '._DB_PREFIX_.'product p LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (p.id_product = pl.id_product AND id_lang = '.intval($params['cookie']->id_lang).') WHERE p.active = 1 ORDER BY pl.name ASC'); foreach ($result as $row) { $id_parent=$row['id_category_default']; $row['id_category']="p".$row['id_product']; $resultParents[$id_parent][] = $row; $resultIds[$row['id_category']] = $row; } Cependant, un de mes produit s'affiche en bas (alors que j'ai bien mis la Catégorie par défaut (Cf. PJs) Configuration : Prestashop 1.4.3 Merci d'avance pour vos retours. Effectivement, un produit s'affiche dans la liste des catégories, si quelqu'un avait la solution... L'ordre des produits n'est pas pris en compte vu qu'on fait un ORDER BY pl.name ASC. Il faudrait récupérer le position de la table ps_category_product. J'ai tenté de joindre cette table et d'ordonner sur le champ position mais ça ne marche pas... Si quelqu'un arrive à le faire je suis preneur. Merci EDIT : je viens de voir que cette méthode ne liste les produits que si la catégorie en question est la catégorie principale. Link to comment Share on other sites More sharing options...
makinero Posted September 27, 2011 Share Posted September 27, 2011 Personne n'a pu se pencher là-dessus ? Link to comment Share on other sites More sharing options...
sharp Posted September 28, 2011 Share Posted September 28, 2011 UP ! Quelqu'un a réussi a afficher les catégories + les sous-catégories + les produits associés ? Link to comment Share on other sites More sharing options...
Christophe Boix Posted October 2, 2011 Share Posted October 2, 2011 Bonsoir, il me semble que j'ai déjà développé un ajout d'articles dans le module de catégories mais je sais plus si c'était pour version 1.3 ou 1.4, je regarderai demain Link to comment Share on other sites More sharing options...
cecile63 Posted October 29, 2011 Share Posted October 29, 2011 Hello, il ne se passe rien les produits ne s'affichent pas mais il n'y a pas d'erreurs. Je cherche à avoir un menu avec tous les produits sur la version 1.4. Merci de votre aide... Link to comment Share on other sites More sharing options...
timmxnizar Posted January 4, 2012 Share Posted January 4, 2012 Bonjour, Merci pour ce morceau de code, je m'en suis servis pour afficher directement la page produit quand une catégorie ne contient qu'un seul produit, ça évite de cliquer deux fois pour arriver sur la page produit. Si ça interesse quelqu'un je lui passe mon code. Link to comment Share on other sites More sharing options...
laurent0384 Posted January 4, 2012 Share Posted January 4, 2012 @timmxnizar Bonsoir, Moi je veux bien jeter un oeil à ce code =P Link to comment Share on other sites More sharing options...
timmxnizar Posted January 5, 2012 Share Posted January 5, 2012 Bonsoir @timmxnizar Bonsoir, Moi je veux bien jeter un oeil à ce code =P Dans la fonction hookLeftColumn() la fonction getTree() tu recupère le code posté plus haut dans ce sujet $resultParents = array(); $resultIds = array(); foreach ($result as &$row) { // je recupere 2 eventuels produits de la categorie courante $category = new Category($row['id_category'], Configuration::get('PS_LANG_DEFAULT')); $product = $category->getProducts((int)($params['cookie']->id_lang), 1, 2); // test si la categorie contient un seul produit if(is_array($product) && count($product) == 1 ) { $row['id_product'] = $product[0]['id_product']; $resultParents[$row['id_parent']][] = &$row; $row['id_category']="p".$row['id_product']; // hack produit $resultIds[$row['id_category']] = &$row; } else // code d'origine { $resultParents[$row['id_parent']][] = &$row; $resultIds[$row['id_category']] = &$row; } } tes questions ou tes remarques sont les bienvenues Link to comment Share on other sites More sharing options...
huhamanu Posted January 25, 2012 Share Posted January 25, 2012 Hello, Des nouvelles pour le problème du produit qui s'affiche dans la mauvaise catégorie? Est-ce que quelqu'un peut mettre en ligne la dernière version du fichier blockcategories.php modifié? Link to comment Share on other sites More sharing options...
Spielbeurk Posted February 1, 2012 Share Posted February 1, 2012 Ca m'interesse aussi mais est ce qu'il faut créer une page à part ou integrer ces codes dans une page existante ? Link to comment Share on other sites More sharing options...
huhamanu Posted February 22, 2012 Share Posted February 22, 2012 Hello, Des nouvelles pour le problème du produit qui s'affiche dans la mauvaise catégorie? Est-ce que quelqu'un peut mettre en ligne la dernière version du fichier blockcategories.php modifié? Ceux qui ont réussi à corriger le problème peuvent-ils nous aider? Link to comment Share on other sites More sharing options...
design4VIP Posted October 14, 2012 Share Posted October 14, 2012 any body solved problem with last product on category list? Link to comment Share on other sites More sharing options...
brunobibos Posted November 28, 2012 Share Posted November 28, 2012 Intérressé également par une solution à ce problème de dernier produit qui s'affiche à la place de la dernière catégorie... Link to comment Share on other sites More sharing options...
Recommended Posts