Jump to content

[RESOLU] Afficher les sous catégories seulement de la catégorie active


Recommended Posts

Bonjour,

 

après quelques heures de recherche !!! j'ai trouvé la syntaxe suivante permettant d'afficher seulement les sous catégories de la catégorie active.

 

je modifie le fichier blockcategories.php

 

public function hookLeftColumn($params)
{
	global $smarty, $cookie;
	$id_customer = (int)($params['cookie']->id_customer);
	$id_group = $id_customer ? Customer::getDefaultGroupId($id_customer) : _PS_DEFAULT_CUSTOMER_GROUP_;
	$id_product = (int)(Tools::getValue('id_product', 0));
	$id_category = (int)(Tools::getValue('id_category', 0));
	$id_lang = (int)($params['cookie']->id_lang);
	$smartyCacheId = 'blockcategories2|'.$id_group.'_'.$id_lang.'_'.$id_product.'_'.$id_category;
 if($id_category)
$category = new CategoryCore($id_category,$id_lang);
 else
$category = Category::getRootCategory ($id_lang);
	$id_category = $category->id;
	Tools::enableCache();
	if (!$this->isCached('blockcategories.tpl', $smartyCacheId))
	{
		$maxdepth = Configuration::get('BLOCK_CATEG_MAX_DEPTH');
		if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
			SELECT c.id_parent, c.id_category,c.nleft,c.nright, cl.name, cl.description, cl.link_rewrite
			FROM `'._DB_PREFIX_.'category` c
			LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` AND `id_lang` = '.$id_lang.')
			LEFT JOIN `'._DB_PREFIX_.'category_group` cg ON (cg.`id_category` = c.`id_category`)
			WHERE (c.`active` = 1 OR c.`id_category` = 1)
			'.((int)($maxdepth) != 0 ? ' AND `level_depth` <= '.(int)($maxdepth) : '').'
			AND cg.`id_group` = '.$id_group.'
AND c.nleft >= '.$category->nleft.'
AND c.nright <= '.$category->nright.'
			ORDER BY `level_depth` ASC, c.`position` ASC')
		)
			return;
		$resultParents = array();
		$resultIds = array();
		foreach ($result as &$row)
		{
			$resultParents[$row['id_parent']][] = &$row;
			$resultIds[$row['id_category']] = &$row;
		}
		$blockCategTree = $this->getTree($resultParents, $resultIds, Configuration::get('BLOCK_CATEG_MAX_DEPTH'),$id_category);

		unset($resultParents);
		unset($resultIds);
		$isDhtml = (Configuration::get('BLOCK_CATEG_DHTML') == 1 ? true : false);
		if (Tools::isSubmit('id_category'))
		{
			$cookie->last_visited_category = $id_category;
			$smarty->assign('currentCategoryId', $cookie->last_visited_category);
		}
		if (Tools::isSubmit('id_product'))
		{
			if (!isset($cookie->last_visited_category) OR !Product::idIsOnCategoryId($id_product, array('0' => array('id_category' => $cookie->last_visited_category))))
			{
				$product = new Product($id_product);
				if (isset($product) AND Validate::isLoadedObject($product))
					$cookie->last_visited_category = (int)($product->id_category_default);
			}
			$smarty->assign('currentCategoryId', (int)($cookie->last_visited_category));
		}
		$smarty->assign('blockCategTree', $blockCategTree);
		if (file_exists(_PS_THEME_DIR_.'modules/blockcategories/blockcategories.tpl'))
			$smarty->assign('branche_tpl_path', _PS_THEME_DIR_.'modules/blockcategories/category-tree-branch.tpl');
		else
			$smarty->assign('branche_tpl_path', _PS_MODULE_DIR_.'blockcategories/category-tree-branch.tpl');
		$smarty->assign('isDhtml', $isDhtml);
	}
	$smarty->cache_lifetime = 31536000; // 1 Year
	$display = $this->display(__FILE__, 'blockcategories.tpl', $smartyCacheId);
	Tools::restoreCacheSettings();
	return $display;

 

sauf que le probleme est que imaginons que j'ai le menu suivant :

 

-APPLE

--iphone

--ipod

-SAMSUNG

--tv

--home cinéma

 

quand je clique sur APPLE par exemple, il s'affiche cela :

 

--iphone

--ipod

 

Cela donne le résultat souhaité , cepandant si je clique sur iphone ou ipod le menu catégorie ce vide !!!

 

alors qu'il devrait rester affiché :

 

--iphone

--ipod

 

Merci de votre aide , en espèrant que je suis assez claire :D

Link to comment
Share on other sites

Bonjour,

 

J'ai du mal a comprendre votre problème.

 

Le but de votre modification est d'afficher les sous catégories de la catégorie actuelle, non ?

 

Il est donc normal que si vous cliquez sur "iPhone", rien n'apparaisse étant donné que celle-ci n'a aucune sous-catégorie. Il est donc normal que votre requête ne vous renvoie rien.

 

Prenons un exemple concret :

 

- Apple

-- iPhone

-- iPad

-- iTruc

- Samsung

-- TV

-- Home Cinéma

 

De base, en arrivant sur l'accueil, vous êtes dans la catégorie "Accueil". Vous remarquerez qu'elle n'apparait pas. Si vous cliquez sur "Apple", vous obtiendrez cette arborescence :

 

- iPhone

- iPad

- iTouch

 

Si vous cliquez sur iPad, vous n'aurez rien.

 

C'est logique ET pas logique. Car normalement, dans une vraie arborescence, vous devriez avoir la catégorie courante. Mais vous devriez pouvoir la récupérer avec une simple requête, vu que vous avez l'ID de cette dernière en GET.

Link to comment
Share on other sites

Bonjour,

 

J'ai du mal a comprendre votre problème.

 

Le but de votre modification est d'afficher les sous catégories de la catégorie actuelle, non ?

 

Il est donc normal que si vous cliquez sur "iPhone", rien n'apparaisse étant donné que celle-ci n'a aucune sous-catégorie. Il est donc normal que votre requête ne vous renvoie rien.

 

Prenons un exemple concret :

 

- Apple

-- iPhone

-- iPad

-- iTruc

- Samsung

-- TV

-- Home Cinéma

 

De base, en arrivant sur l'accueil, vous êtes dans la catégorie "Accueil". Vous remarquerez qu'elle n'apparait pas. Si vous cliquez sur "Apple", vous obtiendrez cette arborescence :

 

- iPhone

- iPad

- iTouch

 

Si vous cliquez sur iPad, vous n'aurez rien.

 

C'est logique ET pas logique. Car normalement, dans une vraie arborescence, vous devriez avoir la catégorie courante. Mais vous devriez pouvoir la récupérer avec une simple requête, vu que vous avez l'ID de cette dernière en GET.

 

Ce qu'il faudrait, c'est que si il n'y a pas de sous-catégorie il laisse le menu tel quel !! par contre si il y a des sous-catégorie alors il n'affiche que celle-ci !!

Link to comment
Share on other sites

T'entends quoi par "il laisse le menu tel quel" ?

 

Si il n'y a pas de sous catégorie, il affiche les catégories de même profondeur (la profondeur c'est un peu le niveau de l'arborescence. L'accueil est de profondeur 0, ses sous catégorie de profondeur 1) ?

 

Pour cela, il suffit de vérifier si ta requête te renvoie quelque chose. Si c'est le cas, alors y'a rien a changer, si ce n'est pas le cas, tu fais une seconde requête qui récupère les catégories ayant la même profondeur et la même catégorie parente que l'actuelle.

 

PS: En anglais, profondeur = depth.

Link to comment
Share on other sites

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...