Bonjour,
Voila je rencontre un petit problème avec mon code. J'ai deux tables dans ma base de données :
la table catégories
la table produits
Ensuite je veux faire un menu hierarchisé comme ceci :
Menu principal : le nom de la catégorie
Sous menu : liste des produits associés
A noter que j'utilise une structure MVC
Je cherche à faire une boucle qui dispatcherait automatiquement les bons produits dans la catégorie adéquate.
<ul id="liste-categories">
<?php foreach ( $categories as $cat ): ?>
<li class="titre-categorie"><?php echo $cat['c_name'] ?>
<a class="btn_category" href="index.php?action=category&id=<?php echo $cat['c_id']?>"><i class="fas fa-plus fleche" data-id=<?php echo $cat['c_id'] ?>></i></a>
</li>
<ul class="ss-titre-categorie" data-id=<?php echo $cat['c_id'] ?>>
<?php foreach ( $produits as $p ) : ?>
<li data-id=<?php echo $p['c_id'] ?>><?php echo $p['p_name'] ?></li>
<?php endforeach; ?>
</ul>
<?php endforeach; ?>
</ul>
Pour l'instant j'ai 6 catégories et seulement 2 produits : crème hydratante reliée à la catégorie Crème, et un sérum lissant reliée à la catégorie Sérums.
Quand je déroule le menu Crème, je voudrais juste qu'apparaisse crème hydratante
Or pour l'instant, quand je clique sur Crème (le premier item de mon menu), les deux produits apparaissent.
Bonsoir.
Lorsque tu récupères les résultats de la requête SQL sur les catégories, tu pourrais par exemple construire une clé pour y stocker les produits associés, par exemple :
public function categoriesWithProducts()
{
$req = $this->db->query('SELECT c_id, c_name FROM categories');
$categories = array_map(function ($category) {
$category['produits'] = $this->productsByCategory($category['id']);
}, $req->fetchAll());
return $categories;
}
public function productsByCategory($catId)
{
$req = $this->db->prepare('SELECT c_id, p_name FROM produits WHERE c_id = ?');
$req->execute([$catId]);
return $req->fetchAll();
}
Ensuite pour la boucle dans l'affichage tu pourras faire :
<ul id="liste-categories">
<?php foreach ($categories as $cat): ?>
<li class="titre-categorie"><?= $cat['c_name'] ?>
<a class="btn_category" href="index.php?action=category&id=<?= $cat['c_id'] ?>"><i class="fas fa-plus fleche" data-id="<?= $cat['c_id'] ?>"></i></a>
<ul class="ss-titre-categorie" data-id="<?= $cat['c_id'] ?>">
<?php foreach ($cat['produits'] as $produit): ?>
<li data-id="<?= $produit['c_id'] ?>"><?= $produit['p_name'] ?></li>
<?php endforeach; ?>
</ul>
</li>
<?php endforeach; ?>
</ul>