Développement

[TUTO] générer l’arboresence des catégories prestashop dans un module (categoryTree)

Par Guillaume , le 21 juillet 2014 , mis à jour le 30 septembre 2017 — 16 commentaires — 2 minutes de lecture

Bonjour tout le monde,

aujourd’hui dans ce tuto je vais vous montrer comment générer l’arborescence des catégories (comme dans les fiches produits) dans un module pour Prestashop 1.5 et 1.6.

Pour ma part j’ai un peu cherché sur le net et j’ai pas rien trouvé, donc je poste ma petite astuce.

Pour Prestashop 1.5:

$root = Category::getRootCategory();
$selected_cat = Product::getProductCategoriesFull($id_product, $id_lang);
$tab_root = array('id_category' => $root->id, 'name' => $root->name);
$helper = new Helper();
$category_tree = $helper->renderCategoryTree($tab_root, $selected_cat, $name, false, true, array(), false, true);
return $category_tree;

Voici le résultat en image:
2014-07-21_100233

Pour la version 1.6:

$root = Category::getRootCategory();
$selected_cat = array($root->id);
$tree = new HelperTreeCategories('categories-treeview', $module->l('Choose a category') );
$tree->setUseCheckBox(true)
->setAttribute('is_category_filter', $root->id)
->setRootCategory($root->id)
->setSelectedCategories($selected_cat)
->setUseSearch(true);
return $tree->render();

résultat en image:
2014-07-21_100809

Tout se passe dans les helper de Prestashop, pour la version 1.6 un helper est prévu à cete effet.
Vu que je suis suis un mec simpa, voici une astuces pour récupérér vos catégories en utilisant jquery:

var categories = [];
$('#categories-treeview input:checked').each(function(i){
categories[i] = $(this).val();
});
return categories;

l’id #category-treeview dépends de vous, vous pouvez lui donner le nom que vous souhaitez.
Dans le code de la version 1.5 il se nomme categoryBox…
En espérant que ce code vous aura aidé.
Enjoy 😉

Guillaume

Commentaires

Le 15 décembre 2014 à 14 02 54 125412, enstein a dit :


Merci pour ton tuto ça ma bcp aider !


Votre réponse sera révisée par les administrateurs si besoin.

Le 15 janvier 2015 à 20 08 15 01151, Youshef a dit :


Merci pour ces précieuses information.

Au fait j'ai un probleme. J'ai la version 1.6.0.9 donc je doit utiliser le deuxieme code sauf que ca me renvois des erreurs :
Fatal error: Uncaught --> Smarty: Unable to load template file 'helpers/tree\tree_toolbar.tpl'
Et des notices du genre Use of undefined constant _PS_ADMIN_DIR ...
Mon module est en front end serais ce ce la la source du probleme ?

Quand j'utilise le premier code le tree est généré mais sans prise en charge des bouton de cochage automatique etc ...

Merci d'avance pour votre aide.


Votre réponse sera révisée par les administrateurs si besoin.

Le 26 janvier 2015 à 15 03 23 01231, Guillaume a dit :


Oui je pense que ça peut venir de la, je te conseillerais de le charger en AJAX.
Il se peut que certaines variables/constantes ne soit pas transmises à SMARTy en Front End.


Votre réponse sera révisée par les administrateurs si besoin.

Le 19 février 2015 à 23 11 04 02042, hicham a dit :


Bonjour,
Avez vous trouver une solution au problème remonté, En fait, j'ai essayer d'appeler le helper depuis le front et j'ai la même problème que toi:
Fatal error: Uncaught –> Smarty: Unable to load template file ‘helpers/tree\tree_toolbar.tpl’

Merci d'avance de ton aide.


Votre réponse sera révisée par les administrateurs si besoin.

Le 20 février 2015 à 10 10 40 02402, Guillaume a dit :


Bonjour,
As tu bien passé le $categoryTree dans smarty en faisant un
[cc lang="php"]$this->smarty->assign('tree',$categoryTree);[/cc]
et dans ton TPL:
[cc lang="php"]{$tree}[/cc]
C'est assez étrange.


Votre réponse sera révisée par les administrateurs si besoin.

Le 20 février 2015 à 11 11 52 02522, Youshef a dit :


Bonjour,

Au fait le probleme c'est au niveau des constantes : _PS_ADMIN_DIR_ et _PS_BO_ALL_THEMES_DIR_ qui semble être indéfinie et qui sont utilisé par le helper.
Je pense que ce helper est fait pour etre utilisé seulement en backend.
Moi j'ai laissé tomber mais si tu veux l'utiliser il va falloir redéfinir les deux variables :
define( '_PS_ADMIN_DIR_', 'C:\wamp\www\ton-site\adminxxx');
define( '_PS_BO_ALL_THEMES_DIR_', '\themes\default\template');
Ensuite il va falloir copier le dossier suivant dans la racine de ton module :
ton-sitel\adminxxxx\themes\default\template\helpers\tree
Et en fin redéfinir le template du helper :
->setTemplateDirectory(_PS_MODULE_DIR_.'/ton-module/helpers/tree');


Votre réponse sera révisée par les administrateurs si besoin.

Le 20 février 2015 à 14 02 02 02022, hicham a dit :


Merci bien pour ton retour, Je vois que t'as fait un grand effort avant d'avoir le même problème que moi.

Je vais essayer:
redéfinir le template du helper :
->setTemplateDirectory(_PS_MODULE_DIR_.’/ton-module/helpers/tree’);

Je pense que ce qui me manque


Votre réponse sera révisée par les administrateurs si besoin.

Le 16 mars 2015 à 15 03 00 03003, Laurence a dit :


Bonjour,
Je pense que vous pouvez m'aider : j'ai supprimé la page home et doit donc la recréer. J'ai beau essayer via phpmyadmin mais je n'y arrive pas
Pouvez-vous m'indiquer comment procéder svp ?
Merci par avance


Votre réponse sera révisée par les administrateurs si besoin.

Le 16 mars 2015 à 15 03 01 03013, Guillaume a dit :


La page home ?
pouvez vous me détailler ce que vous souhaitez faire ?
Cordialement


Votre réponse sera révisée par les administrateurs si besoin.

Le 18 mai 2015 à 19 07 28 05285, Elie a dit :


Bonjour, je suis sur 1.6.0.14 mais pas développeur, pouvez vous donner un peu + d'info sur la modif. Cdlt


Votre réponse sera révisée par les administrateurs si besoin.

Le 19 mai 2015 à 15 03 05 05055, Guillaume a dit :


N'hésitez pas à me contacter par le formulaire de contact ou par mail contact@web-batier.com
Cdlt


Votre réponse sera révisée par les administrateurs si besoin.

Le 18 juillet 2015 à 12 12 56 07567, JeanRem a dit :


Bonjour,

j'ai suivi le tutoriel de prestashop pour l'utilisation du helper form afin de pouvoir sélectionner des catégories (HelperTreeCategories) et les sauvegarder dans la table "configuration" sous forme de tableau sérialisé.

J'arrive bien à afficher les catégories sélectionnées suivant la valeur de la table configuration (définie à l'installation du module), mais si je modifie la sélection et que je soumets le formulaire, la sélection n'est pas sauvegardée dans la table. Je préférerais récupérer les données en php plutôt qu'en jquery.

Une solution peut-être ?


Votre réponse sera révisée par les administrateurs si besoin.

Le 22 juillet 2015 à 9 09 13 07137, Guillaume a dit :


Bonjour,
Personellement, je regarderai pour faire un script jquery afin de stocker les ids des catégories séléctionnées dans un input hidden pour de les exploiter avec PHP.
Sinon regarder ce que contient $_POST lors du submit peut être ??
Cordialement


Votre réponse sera révisée par les administrateurs si besoin.

Le 9 septembre 2015 à 9 09 50 09509, haloperator a dit :


Bonjour qu'elle est l'adresse de ce tutoriel prestashop ou les données son sauvées dans la table configuration?


Votre réponse sera révisée par les administrateurs si besoin.

Le 9 septembre 2015 à 9 09 52 09529, Guillaume a dit :


Désolé je ne vois de quoi vous voulez parler. Pourvez vous être plus précis ?


Votre réponse sera révisée par les administrateurs si besoin.

Le 1 janvier 2016 à 14 02 51 01511, Ali a dit :


Bonjour
Je viens d'avoir un blocage sur mon site et suis à la recherche d'une solution
1- tous mes produits ne sont plus dans les catégories correspondantes, alors j'ai essayé de changer : mettre accueil dans catégorie parente de chaussures et ça m'a crée un autre problème ( le suivant)
2- quand je vais dans le backoffice , catégories , root, après plus rien , comment peux je récupérer mes sous catégories?
Merci d'avance pour votre aide et je vous souhaite une excellente année


Votre réponse sera révisée par les administrateurs si besoin.

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.