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:
Nom : C11.png
Affichages : 468
Taille : 58,1 Ko


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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 
      }
 
 
 
       ?>