Bonjour,

Je veux faire une table qui contient mes categories et sous categories... Je ne vois pas comment ça se gère au niveau PHP, auriez vous un exemple svp pour le model, la vue et le controlleur ?

6 réponses


CakePHP intègre un "comportement" de base : Tree
J'avais cherché quelque chose de similaire et j'étais tombé sur ce comportement, il y a un tuto qui explique bien ça dans le CookBook de CakePHP :

Début du tutorial

Je t'invite à lire tout le chapitre sur ce comportement, c'est relativement bien expliqué. Le comportement en lui-même est assez puissant puisqu'il intègre aussi des méthodes de déplacement d'élément dans l'arbre en conservant les parentés etc.

Bref, c'est ce comportement que tu cherches.

Salut, je ne pense pas répondre exactement à ta question, mais peut être que ça peut t'aider...

En gros au niveau MYSQL tu as une table catégorie.
catégorie contient id, titre, parent_id, etc.

Imaginons en objet :

tu as une fonction du genre select_table :

public function select_table($table)
    {
    try
        {
            $p = $this->bdd->query("SELECT * FROM $table");
            return $p->fetchAll(PDO::FETCH_OBJ);
        }
        catch( PDOException $e ){die( $e-> getMessage() );}
    }

Tu as instancié ta classe auparavant ( avec une variable $classe ), donc tu crées 2 variables :

$cats = $classe->select_table('categorie');
$sous_cats = $classe->select_table('categorie');

Ensuite tu fais un foreach dans un foreach :

foreach($cats as $cat)
{   
        if( $categorie-> parent_id == null ) // si c'est une catégorie je vais scanner l'autre variable
        {
            foreach( $sous_cats as $sous_cat )
            {
              if($cat->id == $sous_cat->parent_id)
              {'A ce moment, tu as chopé les sous catégories de la catégorie cat->id'}
            }
        }
}

Désolé je ne connais pas cake PHP, mais en gros en PHP objet ça peut se faire comme ça...

Le tree-behaviour c'est super, mais pas du tout obligatoire s'il n'y a que 2 niveaux ( catégories + sous-catégories ), enfin c'est un avis perso. Après en utilisant cake PHP ça doit être tout codé d'office, c'est peut être la solution...

Je pense comme toi Zvetlania tout dépend de la profondeur que l'on souhaite avoir ;)

Tu as trouvé la solution ?
Sinon si tu as déjà des bouts de code à envoyer ça pourrait éclairer nos lanternes ;)