1 pièce(s) jointe(s)
Afficher les catégories et les sous-catégories d'un menu dynamique
Bonjour, je cherche votre aide pour faire apparaitre mes annonces dans le sous-menu. Quand je clique sur un sous menu rien n'apparait.
J'ai donc des tables qui sont liées de la façon suivante:
Pièce jointe 610895
Et ma table categories a la forme suivante:
id |
id_parent |
nom_fr |
nom_en |
ok_form |
1 |
0 |
Accueil |
... |
0 |
... |
|
|
|
|
2 |
0 |
Immobilier |
... |
1 |
201 |
2 |
Vente de Maisons |
... |
1 |
202 |
2 |
Location de Maisons |
... |
1 |
203 |
2 |
Vente d Appartements |
... |
1 |
204 |
2 |
Location d Appartements |
... |
1 |
205 |
2 |
Bureaux |
... |
1 |
206 |
2 |
Terrains |
... |
1 |
... |
|
|
|
|
3 |
0 |
Véhicules |
... |
1 |
301 |
3 |
Voitures |
... |
1 |
301 |
3 |
Motos |
... |
1 |
302 |
3 |
Accessoires |
... |
1 |
... |
|
|
|
|
4 |
0 |
Multimedia |
... |
1 |
401 |
4 |
Téléphones |
... |
1 |
402 |
4 |
Télévisions |
... |
1 |
... |
|
|
|
|
5 |
0 |
... |
... |
1 |
Je voudrais également savoir s'il faudrait ajouter un nouveau champ "page" dans la table categories pour la partie accueil et contact où il faut mettre des liens? Si oui, faudrait-il mettre des liens pour les autres catégories dont on va récupérer l'id pour l'affichage de l'annonce?
Voici le code de mon menu (dynamique):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| function getMenu( $id_parent=0 )
{
global $bdd;
$sql_lang = (!empty(($_SESSION['lang']) && in_array($_SESSION['lang'], ['fr','en','es']) ))? $_SESSION['lang'] : 'fr'; // on s'assure que la langue est correcte
$sql = "SELECT id, id_parent, nom_".$sql_lang." AS nom
FROM categories
WHERE id_parent = :id_parent
ORDER BY id
";
try{
$req = $bdd->prepare($sql);
$req->execute( array(':id_parent'=>$id_parent) );
$res = $req->fetchAll(PDO::FETCH_ASSOC);
}catch(Exception $e){
echo "Erreur dans la requête " . $sql;
$res = false;
}
return $res;
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| <div id="menu>">
<nav>
<label for="menu-mobile" class="menu-mobile">Menu</label>
<input type="checkbox" id="menu-mobile" role="button">
<?php
$menus = getMenu(0);
echo '<ul>';
foreach ($menus as $menu) {
echo "<li class='menu'><a href= 'affichage.php?id={$menu['id']}'>{$menu['nom']}</a>";
$sous_menus = getMenu($menu['id']);
if ($sous_menus !== false) {
echo '<ul>';
foreach ($sous_menus as $sous_menu) {
echo "<li class='submenu'><a href= 'affichage.php?id={$sous_menu['id']}'>{$sous_menu['nom']} </a></li>";
}
echo '</ul>';
}
echo '</li>';
}
echo '</ul>';
?>
</nav>
</div> |
Le code d'affichage:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| function getAffichage($categorie){
global $bdd;
$sql_lang = (!empty(($_SESSION['lang']) && in_array($_SESSION['lang'], ['fr','en','es']) ))? $_SESSION['lang'] : 'fr';
$sql = ' SELECT A.*
,C.nom_'.$sql_lang.' AS CATEGORIE
,V.ville_'.$sql_lang.' AS VILLE
FROM annonces A
LEFT JOIN categories C ON C.id = A.id_categorie
LEFT JOIN villes V ON V.id = A.id_ville
WHERE A.id_categorie = ".$categorie."
ORDER BY A.created_date DESC';
try {
$req = $bdd->prepare($sql);
$req->execute();
$res = $req->fetchAll(PDO::FETCH_ASSOC);
} catch (Exception $e) {
echo "Erreur dans la requête " . $sql;
}
// le temps des tests pour voir le résultat
return $res;
}
function affichageAnnonce($categorie){
global $bdd;
$annonces = getAffichage($categorie);
$images = getImagesAnnonces();
$res = [];
foreach ($annonces as $R) {
$res[$R['id']] = $R;
$imgs = !empty($images[$R['id']]) ? $images[$R['id']] : NULL;
if(!empty($imgs)){
foreach($imgs as $I){
$res[$R['id']]['images'][] = !empty($I['IMG']) ? $I['IMG'] : null;
}
}else{
$res[$R['id']]['images'] = null;
}
}
return $res;
} |
J'ai séparé les fonctions, sinon ça se répercute sur les images.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| <?php
$categorie = !empty($_GET['categorie']) ? trim($_GET['categorie']) : null;
$affichage= affichageAnnonce($categorie);
foreach ($affichage as $a) {
echo '<div class="annoncepubs">';
$images = !empty($a['images']) ? $a['images'] : ['/no_image.png']; // array
if (!empty($images)) {
//boucle sur les images
echo'<div class="container">';
echo ' <div class="slider" >';
foreach ($images as $img) {
echo '<img class ="active" style="width:90px; height:90px;" src="' . $img . '">';
}
echo "</div>"; // fin div slider .
echo '<div class="cont-btn" >';
echo ' <div class="btn-nav left" > <';
echo " </div>";
echo ' <div class="btn-nav right" > >';
echo " </div>";
echo "</div>";
echo "</div>"; // fin div container
}
echo "<span class='category'>" . $a['CATEGORIE'] . "</span>";
echo "<span class='title'>" . $a['titre'] . "</span>";
echo "<span class='comment'>" . $a['description'] . "</span>";
echo "<span class='price'>" . $a['prix'] . "</span>";
echo "<span class='date'>" . $a['created_date'] . "</span>";
echo "</div>"; // fin div annoncepubs
}
?> |