Toutes les clefs pour réussir dans le e-commerce

Mes modules Prestashop

Créer un arbre des catégories sous prestashop

Ce petit bout de code devrait être utile à pas mal de personnes.


function getCategoryTree() {
            $id_lang = $this->context->language->id;
            $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
			SELECT c.id_category, c.id_parent, cl.name
			FROM `'._DB_PREFIX_.'category` c
			'.Shop::addSqlAssociation('category', 'c').'
			LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON c.`id_category` = cl.`id_category`'.Shop::addSqlRestrictionOnLang('cl').'
			WHERE 1 '.($id_lang ? 'AND `id_lang` = '.(int)$id_lang : '')
		);
            foreach($result as $value) {
                $dataset[$value['id_category']]=$value;
                if(!is_numeric($value['id_parent']) || $value['id_parent'] == 0)
                        $dataset[$value['id_category']]['id_parent'] = null;
            }
            
            $tree = array();
            foreach ($dataset as $id=>&$node) {
                if ($node['id_parent'] === null || $node['id_parent'] == '' || !is_numeric($node['id_parent'])) {
                            $tree[$id] = &$node;
                        } else {
                                if (!isset($dataset[$node['id_parent']]['children'])) $dataset[$node['id_parent']]['children'] = array();
                                $dataset[$node['id_parent']]['children'][$id] = &$node;
                        }
                }
            return $tree;
        }

        function nested2ul($data) {
            $result = array();

            if (sizeof($data) > 0) {
              $result[] = '<ul class="oasmUlCat">';
              foreach ($data as $entry) {
                 $child = (isset($entry['children']))?$this->nested2ul($entry['children']):'';
                $result[] = sprintf(
                  '<li class="oasmLiCat">%s %s</li>',
                  $entry['name'],
                  $child
                );
              }
              $result[] = '</ul>';
            }

            return implode($result);
        }



La première fonction retourne un tableau PHP avec l’arbre des catégories
La seconde retourne l’arbre des catégories mis en forme avec des UL et LI.

A utiliser comme ceci:


$tree = getCategoryTree();
echo nested2ul($tree);

Testé sous Prestashop 1.5

Poster un Commentaire

6 Commentaires sur "Créer un arbre des catégories sous prestashop"

Recevoir un email pour
avatar
Trier par:   plus récent | plus vieux | Plus de vote
2FR3
Invité

Bonjour,

Merci pour le partage, par contre un screen de ce que cela donne aurait été un plus ;)

Bon WE a toi !

PrestaEdit
Invité

Bonjour Olivier,

Merci pour le partage !

Toutefois, il était possible de récupérer un tableau comportement le “tree” nativement:

$category = new Category((int)Context::getContext()->shop->getCategory(), (int)Context::getContext()->language->id);

$tree = $category->recurseLiteCategTree();

Cette méthode existe depuis la version 1.0 de PrestaShop.

Webbax
Invité

@PrestaEdit, ahah combien de fois j’ai utilisé cette méthode… encore actuellement dans les versions 1.6 de mes modules, fonctionne toujours très bien.

neo_88
Invité

est-il possible d’avoir un peu d’info sur la mise en place du code.
cdlt

wpDiscuz