Jump to content

Ajouter les produits au listing des sous catégories


Recommended Posts

Bonsoir,

 

J'essaye de réaliser un module qui affiche sous forme de liste non ordonné (ul) les catégories, sous catégories et les produits :

 

- Cat parent 1

---- Cat child 1

-------- produit 1

-------- produit 2

---- Cat child 2

-------- produit 3

-------- produit 4

 

 

- Cat parent 2

---- Cat child 3

-------- produit 5

-------- produit 6

---- Cat child 4

-------- produit 7

-------- produit 8

 

J'ai récupérer la partie displayHookLeft du module blockcategories pour l'ajouter dans mon module, ce qui donne :

 

<?php
public function hookDisplayTop( $params ) {
$id_lang = (int)$params['cookie']->id_lang;
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
  SELECT c.id_parent, c.id_category, cl.name, cl.description, cl.link_rewrite
  FROM `'._DB_PREFIX_.'category` c
  INNER JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` AND cl.`id_lang` = '.$id_lang.')
  INNER JOIN `'._DB_PREFIX_.'category_shop` cs ON (cs.`id_category` = c.`id_category`)
  WHERE (c.`active` = 1 OR c.`id_category` = '.(int)Configuration::get('PS_HOME_CATEGORY').')
  AND c.`id_category` != '.(int)Configuration::get('PS_ROOT_CATEGORY').'
  AND c.id_category IN (SELECT id_category FROM `'._DB_PREFIX_.'category_group`)
  ORDER BY `level_depth` ASC, '.(Configuration::get('BLOCK_CATEG_SORT') ? 'cl.`name`' : 'cs.`position`').' '.(Configuration::get('BLOCK_CATEG_SORT_WAY') ? 'DESC' : 'ASC'));

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'));
unset($resultParents, $resultIds);
ppp($blockCategTree);

$html = $this->display( __FILE__, 'menu.tpl' );
return $html;
}
public function getTree($resultParents, $resultIds, $maxDepth, $id_category = null, $currentDepth = 0)
{
if (is_null($id_category))
 $id_category = $this->context->shop->getCategory();
$children = array();
if (isset($resultParents[$id_category]) && count($resultParents[$id_category]) && ($maxDepth == 0 || $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;
$return = array('id' => $id_category, 'link' => $this->context->link->getCategoryLink($id_category, $resultIds[$id_category]['link_rewrite']),
 'name' => $resultIds[$id_category]['name'], 'desc'=> $resultIds[$id_category]['description'],
 'children' => $children);
return $return;
}

 

Le debug retourne :

 

Array
(
[id] => 2
[link] => http://localhost/prestashop/index.php?id_category=2&controller=category
[name] => Accueil
[desc] =>
[children] => Array
	(
		[0] => Array
			(
				[id] => 3
				[link] => http://localhost/prestashop/index.php?id_category=3&controller=category
				[name] => iPods
				[desc] => Il est temps, pour le meilleur lecteur de musique, de remonter sur scène pour un rappel. Avec le nouvel iPod, le monde est votre scène.
				[children] => Array
					(
					)
			)
		[1] => Array
			(
				[id] => 4
				[link] => http://localhost/prestashop/index.php?id_category=4&controller=category
				[name] => Accessoires
				[desc] => Tous les accessoires à la mode pour votre iPod
				[children] => Array
					(
					)
			)
		[2] => Array
			(
				[id] => 5
				[link] => http://localhost/prestashop/index.php?id_category=5&controller=category
				[name] => Portables
				[desc] => Le tout dernier processeur Intel, un disque dur plus spacieux, de la mémoire à profusion et d'autres nouveautés. Le tout, dans à peine 2,59 cm qui vous libèrent de toute entrave. Les nouveaux portables Mac réunissent les performances, la puissance et la connectivité d'un ordinateur de bureau. Sans la partie bureau.
				[children] => Array
					(
						[0] => Array
							(
								[id] => 6
								[link] => http://localhost/prestashop/index.php?id_category=6&controller=category
								[name] => Windows
								[desc] =>
								[children] => Array
									(
									)
							)
					)
			)
	)
)

 

Ce que je voudrais c'est récupérer les produits pour les ajouter dans le tableau des sous catégories pour ensuite afficher le tout dans un tpl.

 

Ceci serait parfait :

[id] => 4
				[link] => http://localhost/prestashop/index.php?id_category=4&controller=category
				[name] => Accessoires
				[desc] => Tous les accessoires à la mode pour votre iPod
				[products] => Array
				[children] => Array

 

Merci d'avance.

Edited by Rtransat (see edit history)
Link to comment
Share on other sites

Tu risques d'avoir des produits en double... Les produits peuvent appartenir à plusieurs catégories!

 

Il te faut juste récupérer le nom et l'id des produits, ou tu veux aussi la description, le lien, les déclinaisons, les images, ... dans ton arbre ?

Link to comment
Share on other sites

Je veux récupérer le lien et le nom de chaque produits pour les mettre dans un li>a et je voudrais les même informations pour les catégories/sous catégories.

 

Et je voudrais exclure la catégorie root :

 

[id] => 2
[link] => http://boutique.dev/2-home
[name] => Accueil
[desc] =>
[children] => Array

 

Je pensais que c'était via cette requête :

 

AND c.`id_category` != '.(int)Configuration::get('PS_ROOT_CATEGORY').'

 

Mais la catégorie n'est pas exclue.

Edited by Rtransat (see edit history)
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...