theodelacharie Posted October 21, 2013 Share Posted October 21, 2013 Bonjour à tous, j'espère que votre lundi matin n'est pas trop hard ! De mon coté, je me bats depuis quelques jours avec un problème plus complexe qu'il n'en à l'air (enfin je crois). Un menu déroullant de mon blocktopmenu affiche des liens vers des sous-catégories CMS. Le hic, c'est que malgré le paramétrage de la "position" dans le backoffice, les sous-catégories s'affichent encore désespérément dans l'ordre des IDs... Y a-t-il une solution plus simple que de modifier de force l'IDs des sous-catégories dans la base de données ? Merci à tous pour vos lumières ! Théo PS : le fait de renommer les catégories avec un numéro devant ne marche visiblement plus dans la 1.5. Link to comment Share on other sites More sharing options...
theodelacharie Posted October 29, 2013 Author Share Posted October 29, 2013 Up up up ! Personne n'a une idée ? Je n'ai toujours pas trouvé de solution à ce problème... Merci à tout ceux qui pourraient avoir un éclair de génie ! Bien cordialement, Théo Link to comment Share on other sites More sharing options...
Guillaume74 Posted October 29, 2013 Share Posted October 29, 2013 (edited) salut, je ne sais pas si j'ai bien compris ton soucis mais je crois que ça pourrais t'aider à faire ce que tu souhaite... http://www.prestashop.com/forums/topic/193333-ordre-daffichage-liste-produits/?do=findComment&comment=1436955 Edited October 29, 2013 by Guillaume74 (see edit history) Link to comment Share on other sites More sharing options...
theodelacharie Posted October 29, 2013 Author Share Posted October 29, 2013 Salut Guillaume ! Merci pour ta réponse, mais malheureusement, cela ne correspond pas à mon problème. J'ai du mal m'exprimer. Mon problème est le suivant : J'utilise le module blocktopmenu pour afficher des catégories CMS, et dans le menu déroulant, j'ai donc les sous-catégories et pages CMS. Le problème, c'est que ce menu déroulant affiche les catégories et pages CMS par ordre d'id, et non par la position définie en back-office. Et pour changer les IDs manuellement... Un peu galère ! Ils sont repris par plusieurs tables en plus... Je pense que c'est dans le code de blocktopmenu.php qu'il faut ajouter une ligne du style Order by : position, mais je ne m'y connais pas assez pour savoir ou ni comment intégrer ce code. Après avoir bien fouillé, j'ai un peu l'impression que le module blocktopmenu l'affiche dans cet ordre par défaut d'instruction, donc difficile d'appliquer ma méthode habituelle : modifier le code existant ;-) Merci Guillaume pour le temps que tu m'as consacré, si t'as d'autres idées je suis preneur. J'ai vraiment fouillé tout le forum, y'a rien sur ce sujet. Beaucoup de posts sur l'ordre des catégories dans le block CMS, mais pas pour le blocktopmenu... Merci à tous ! Link to comment Share on other sites More sharing options...
Guillaume74 Posted October 29, 2013 Share Posted October 29, 2013 Salut Guillaume ! Merci pour ta réponse, mais malheureusement, cela ne correspond pas à mon problème. J'ai du mal m'exprimer. Mon problème est le suivant : J'utilise le module blocktopmenu pour afficher des catégories CMS, et dans le menu déroulant, j'ai donc les sous-catégories et pages CMS. Le problème, c'est que ce menu déroulant affiche les catégories et pages CMS par ordre d'id, et non par la position définie en back-office. Et pour changer les IDs manuellement... Un peu galère ! Ils sont repris par plusieurs tables en plus... Je pense que c'est dans le code de blocktopmenu.php qu'il faut ajouter une ligne du style Order by : position, mais je ne m'y connais pas assez pour savoir ou ni comment intégrer ce code. Après avoir bien fouillé, j'ai un peu l'impression que le module blocktopmenu l'affiche dans cet ordre par défaut d'instruction, donc difficile d'appliquer ma méthode habituelle : modifier le code existant ;-) Merci Guillaume pour le temps que tu m'as consacré, si t'as d'autres idées je suis preneur. J'ai vraiment fouillé tout le forum, y'a rien sur ce sujet. Beaucoup de posts sur l'ordre des catégories dans le block CMS, mais pas pour le blocktopmenu... Merci à tous ! A ok je n avais pas compris que c'était dans le menu, je ne sais pas le thème que tu utilise mais avec le miens on peu juste les déplacer et les faisant glisser dans la config du module. Link to comment Share on other sites More sharing options...
theodelacharie Posted October 29, 2013 Author Share Posted October 29, 2013 J'utilise le module Menu Haut horizontal INSTALLÉ Développé par : PrestaShop | Version : 1.6 | Catégorie : Fonctionnalités Front Office Malheureusement, pas de paramétrage précis du module : tu passes juste les éléments de gauche à droite. Aucun problème d'ordre pour les éléments principaux donc, mais pour les éléments du menu déroulant, pas de contrôle via le back-office. Si t'as une idée du code qu'il faut que j'insère.... Link to comment Share on other sites More sharing options...
Guillaume74 Posted October 29, 2013 Share Posted October 29, 2013 Malheureusement je ne suis pas assez fort pour ça désolé... Link to comment Share on other sites More sharing options...
theodelacharie Posted October 29, 2013 Author Share Posted October 29, 2013 Voila où j'en suis dans mes recherches. Elles concernent le bout de code suivant, tiré de blocktopmenu.php : private function getCMSCategories($recursive = false, $parent = 1, $id_lang = false) { $id_lang = $id_lang ? (int)$id_lang : (int)Context::getContext()->language->id; if ($recursive === false) { $sql = 'SELECT bcp.`id_cms_category`, bcp.`id_parent`, bcp.`level_depth`, bcp.`active`, bcp.`position`, cl.`name`, cl.`link_rewrite` FROM `'._DB_PREFIX_.'cms_category` bcp INNER JOIN `'._DB_PREFIX_.'cms_category_lang` cl ON (bcp.`id_cms_category` = cl.`id_cms_category`) WHERE cl.`id_lang` = '.(int)$id_lang.' AND bcp.`id_parent` = '.(int)$parent; return Db::getInstance()->executeS($sql); } else { $sql = 'SELECT bcp.`id_cms_category`, bcp.`id_parent`, bcp.`level_depth`, bcp.`active`, bcp.`position`, cl.`name`, cl.`link_rewrite` FROM `'._DB_PREFIX_.'cms_category` bcp INNER JOIN `'._DB_PREFIX_.'cms_category_lang` cl ON (bcp.`id_cms_category` = cl.`id_cms_category`) WHERE cl.`id_lang` = '.(int)$id_lang.' AND bcp.`id_parent` = '.(int)$parent ; $results = Db::getInstance()->executeS($sql); foreach ($results as $result) { $sub_categories = $this->getCMSCategories(true, $result['id_cms_category'], (int)$id_lang); if ($sub_categories && count($sub_categories) > 0) $result['sub_categories'] = $sub_categories; $categories[] = $result; } return isset($categories) ? $categories : false; } } private function getCMSPages($id_cms_category, $id_shop = false, $id_lang = false) { $id_shop = ($id_shop !== false) ? (int)$id_shop : (int)Context::getContext()->shop->id; $id_lang = $id_lang ? (int)$id_lang : (int)Context::getContext()->language->id; $sql = 'SELECT c.`id_cms`, cl.`meta_title`, cl.`link_rewrite` FROM `'._DB_PREFIX_.'cms` c INNER JOIN `'._DB_PREFIX_.'cms_shop` cs ON (c.`id_cms` = cs.`id_cms`) INNER JOIN `'._DB_PREFIX_.'cms_lang` cl ON (c.`id_cms` = cl.`id_cms`) WHERE c.`id_cms_category` = '.(int)$id_cms_category.' AND cs.`id_shop` = '.(int)$id_shop.' AND cl.`id_lang` = '.(int)$id_lang.' AND c.`active` = 1 ORDER BY `position`'; return Db::getInstance()->executeS($sql); } Ce code m'intéresse tout particulièrement, parce que les articles CMS s'affichent dans le bon ordre. Seules les sous-catégories posent problème. En effet, on voit que lors de l'appel des bdd des pages cms, il y a ORDER BY `position`';. Pas pour les catégories. Mais si j'essaye d'intégrer ce code pour les catégorie, bim, page blanche ! Y a-t-il es pros de sql dans le coin ? Merci ! Link to comment Share on other sites More sharing options...
Comma-Imagination Posted February 26, 2019 Share Posted February 26, 2019 6 ans plus tard, j'ai le même problème et je cherche une solution. C'est les sous catégories CMS mon soucis. 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