Bonsoir,
J’ai suivi un tutoriel pour créer un système de tree behavior,
maintenant j’essaye de poster un article avec les categories que j’ai déjà enregistré en DB grâce au tree behavior
J’ai 4 catégorie et 2 sous-catégorie.
Exemple:

Categorie 1
sous catégorie 1.1
sous catégorie 1.2

Categorie 2
sous catégorie 1.1
sous catégorie 1.2

Comment puis-je sélectionné d’abord une catégorie en suite une sous catégorie avant de save mes datas ?

Je vous remercie d’avance de votre aide.

PS: Je suis sous Cakephp2.x

7 réponses


Lartak
Réponse acceptée

Tu peux par exemple t'inspirer du tutoriel Tutoriel Vidéo jQuery » Lier plusieurs select.

Bonsoir.
Pourquoi vouloir d'abord sélectionner une catégorie pour ensuite sélectionner une de ses sous-catégories ?
Il te suffit de directement sélectionner la sous-catégorie voulue.
Surtout qu'il est facile de générer une liste pour les inputs select dans un formulaire avec la méthode generateTreeList.
Ce que tu veux expliquer, c'est que tu as par exemple :
Catégorie 1

  • Catégorie 1.1
  • Catégorie 1.2

Catégorie 2

  • Catégorie 2.1
  • Catégorie 2.2

Catégorie 3

  • Catégorie 3.1
  • Catégorie 3.2

Catégorie 4

  • Catégorie 4.1
  • Catégorie 4.2

etc ...
C'est bien ça ?

donny
Auteur

Bonsoir,

Dans le cas ou je risque d'avoir plusieurs sous categorie pour chaque categorie.
Exemple:
Categorie 1 contient 20 sous-categorie.
Categorie 2 contient 1000 sous-categorie
Categorie 3 contient 180 sous-categorie
etc
donc autant afficher d'abord les categories 1 en suite les sous-categorie

Dans ce cas là, il te faut le faire avec de l'ajax.
De cette manière, tu fais un select qui t'affiche les catégories parentes et lorsqu'une catégorie parente est sélectionnée, un appel ajax est fait pour récupérer ses catégories enfants, qui elles mêmes seront affichées dans un second select, il ne te restera plus qu'à sélectionner la catégorie enfant voulue.

Categorie 2 contient 1000 sous-categorie

Par contre, là ça craint, avec autant de catégories enfants, tu vas avoir des soucis de performances.

Categorie 3 contient 180 sous-categorie

Rien que ça, c'est énorme.

donny
Auteur

Si j'ai bien compris,

Dans mon Model Post par exemple,
je fait un $belongsTo pour la table Category.

En suite dans mon controllerPost
avec la methode submitPost
je fait mon Select pour la categorie 1
en suite en je set l'Id afin de le get et de l'envoyer en ajax dans le second select ?

PS: Je ne compte pas mettre 1k de sous categorie cela etait à titre d'exemple, mais j'en aurait environs entre 30 et 40 pour chaque categorie 1

Dans mon Model Post par exemple, je fait un $belongsTo pour la table Category.

Tu n'as pas besoin de faire de modification dans tes associations pour le model Category.
Dans l'action qui correspond à l'affichage/traitement de ton formulaire, tu fais une requête SQL avec un find('list') par exemple, dans laquelle tu fais une condition pour ne récupérer que les catégories qui ne dépendent pas d'une catégorie parente, tu envoies les données via une variable à la vue, ensuite tu alimentes le select avec ces données.
En javascript, tu fais une écoute sur le select de manière à ce que lorsqu'une valeur est sélectionnée, la fonction envoie la valeur à une autre fonction du controller par exemple, qui renverra les catégories enfants correspondants à l'id de la catégorie sélectionnée et toujours via ajax, tu injectes ces données dans un second select.
Juste pour préciser, tu n'es pas obligé de créer une autre fonction dans ton controller pour alimenter le second select, tu peux très bien le faire sur la fonction correspondant au formulaire et utiliser la vérification du type de requête reçue par la fonction.

donny
Auteur

Je viens de test plusieurs solutions sans aucun resultat je n'arrive pas vraiment a voir comment je peux transcrire tout ca en code.
Aurait-tu un exemple ?