Jump to content

Ordre des catégories CMS dans le blocktopmenu


Recommended Posts

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

  • 2 weeks later...

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

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.

 

q736.jpg

Link to comment
Share on other sites

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

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

  • 5 years later...

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...