Le titre n'est pas très explicite. Simplement, je voudrais, dans une barre de navigation, afficher différentes catégories de produits et, pour chacune, dans un dropdown, les sous-catégories qui lui sont rattachées.
En mettant tout le code dans un même fichier, j'obtiens le résultat suivant, qui fonctionne comme attendu :
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container-fluid">
<ul class="navbar-nav">
<?php
$bdd = new PDO(...);
$req = $bdd->query('SELECT cat_id, cat_name FROM category');
$categories = [];
while ($row = $req->fetch()) {
$category = [
'id' => $row['cat_id'],
'name' => $row['cat_name'],
];
$categories[] = $category;
}
foreach ($categories as $category) {
?>
<li class="nav-item">
<div class="dropdown">
<button class="btn btn-secondary bg-transparent border-0" data-bs-toggle="dropdown">
<?=($category['name']); ?>
</button>
<div class="dropdown-menu">
<?php
$req = $bdd->prepare(
"SELECT subcat_id, subcat_name FROM subcategory WHERE cat_id = ?"
);
$req->execute(array($category['id']));
$subcategories = [];
while ($row = $req->fetch()) {
$subcategory = [
'id' => $row['subcat_id'],
'name' => $row['subcat_name'],
];
$subcategories[] = $subcategory;
}
foreach ($subcategories as $subcategory) {
?>
<a class="dropdown-item"
href="index.php?action=subcategory&id=<?= $subcategory['id'] ?>">
<?=($subcategory['name']); ?>
</a>
<?php
}
?>
</div>
</div>
</li>
<?php
}
?>
</ul>
</nav>
L'objectif serait d'externaliser au maximum le PHP. J'ai créé, dans un autre fichier, une fonction qui permet de se connecter à la base de donnée, une autre qui permet d'afficher toutes les catégories, mais je n'arriver pas à concevoir de fonction qui affiche les sous-catégories d'une catégorie donnée.Il faudrait une fonction getSubcategories qui prendrait en paramètre $category['id'], mais cette valeur étant incrémentée à chaque tour de la première boucle, je ne sais pas comment la transmettre.
Est-ce faisable en utilisant uniquement PHP, ou autrement ?
Je vous remercie pour votre aide.