par
Fred120 » 15 déc. 2022, 22:43
Bonjour,
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.
Bonjour,
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 :
[PHP]
<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>[/php]
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.