IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Afficher les catégories et les sous-catégories d'un menu dynamique


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2021
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2021
    Messages : 81
    Par défaut 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:
    Nom : C11.png
Affichages : 461
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 
          }
     
     
     
           ?>

  2. #2
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut
    Bonjour,

    C'est dans le fichier affichage.php qu'il faut dispatcher en fonction de l'id *.
    Ça vaut aussi pour accueil et contact.

    * Et ce n'est pas $_GET['categorie'], mais $_GET['id'].


    Il faudrait être plus rigoureux.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2021
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2021
    Messages : 81
    Par défaut
    Car je pensais qu'il fallait fallait faire get catégorie qui est le name dans le select.

    J'ai donc modifié la fonction getAffichage, mais je n'ai pas de résulat:

    Page des fonctions:
    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
      function getAffichage($categorie){
          global $bdd;
          $sql_lang = (!empty(($_SESSION['lang']) && in_array($_SESSION['lang'], ['fr','en','es']) ))? $_SESSION['lang'] : 'fr';
          $sql = ' SELECT  A.*
                          ,C.id AS id, 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;
     
      }
    Et dans le fichier affichage.php:
    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
     <?php
            $categorie = !empty($_GET['id']) ? trim($_GET['id']) : 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 
          }
     
           ?>
    NB: On n'a pas utilisé la fonction getmenu(). Doit-on l'utiliser au lieu de getAffichage?

  4. #4
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut
    Il ne faut pas tout mélanger...

    Soit c'est le menu, soit le select...

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2021
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2021
    Messages : 81
    Par défaut
    Ok, donc du coup j'ai choisi getMenu pour afficher les catégories des annonces au lieu de getAffichage, mais j'ai l'erreur suivante dans la fonction affichageAnnonce:
    Warning: Invalid argument supplied for foreach() in C:

    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
     function getMenu( $id,$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 A*
             ,C.id AS id, C.id_parent, C.nom_".$sql_lang." AS nom
             ,V*
           FROM annonces A
           LEFT JOIN categories C ON C.id = A.id_categorie
           LEFT JOIN villes V ON V.id = A.id_ville
           WHERE id_parent = :id_parent
           AND id = :id
           ORDER BY A.created_date DESC
           ";
     
            try{
               $req = $bdd->prepare($sql);
               $req->execute( array(':id',':id_parent'=>$id,$id_parent) ); 
               $res =  $req->fetchAll(PDO::FETCH_ASSOC);
             }catch(Exception $e){
               echo "Erreur dans la requête " . $sql;
               $res = false;
             }
     
            return $res;
         }

  6. #6
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut
    Si tu fais n'importe quoi sans comprendre, tu n'arriveras à rien.

    1- Tes fonctions ont un usage précis :
    • getMenu() permet d'afficher... le menu !

    Si tu veux afficher "les articles d'une catégorie", écrit la fonction correspondante.
    Avec un nom EXPLICITE.
    Par exemple :
    • getArticles_fromCategorie($id_cat)


    2- concernant :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
            $sql_lang = (!empty(($_SESSION['lang']) && in_array($_SESSION['lang'], ['fr','en','es']) ))? $_SESSION['lang'] : 'fr'; // on s'assure que la langue est correcte
    SI CE TEST a été fait en amont (via une fonction setSession_lang() par exemple),
    alors dans tes fonctions, il suffit d'écrire :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
            $sql_lang = $_SESSION['lang'];

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2021
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2021
    Messages : 81
    Par défaut
    L'objectif c'est c'est de faire apparaitre les annonces par catégories. Mes tables étant liées comme le montre la photo du 1er message, je cherche à éviter de mélanger les id, sinon le programme attribue à chaque annonce une image qui ne lui appartient pas. Il faut donc que j'intègre les tables annonces, villes, et categories pour l'affichage.
    Ce qui me parait logique, au lieu de 20 fonctions pour chaque categorie et sous catégorie, j'ai fait plus simple, mais il me reste le lien pour accueil et titre.


    Voici ce que j'ai fait. Ce qui me parait logique:

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    function getArticles($id_cat){
          global $bdd;
        $res = [];
     
        $sql = 'SELECT  A.* Except A.id
        , C.id as id, 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 1 = 1 
      ';
     
    //pour Accueil et contact 
    if($id_cat==1 || $id_cat==20){
      $sql .= "  "; //On ajoute un lien, mais comment?
    }
     
    //Pour les autres catégories
    if(1<$id_cat<20){ 
      $sql .=  $sql .= " AND  id = ".$id_cat." ";
    }
     
    //on fini par ajouter le order by
    $sql .= "   ORDER BY 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($id_cat){
        global $bdd;
        $annonces = getArticles($id_cat);
        $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;
     
      }

    Et dans la page affichage.php:
    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
            $id_cat = !empty($_GET['id']) ? trim($_GET['id']) : null;
          $affichage= affichageAnnonce($id_cat);
     
     
     
         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 
          }
     
     
     
           ?>
    Qu'est-ce que t'en penses?

  8. #8
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut
    1- Je répète :
    • donne des noms EXPLICITES à tes fonctions / variables

    ça te simplifiera grandement la vie !

    • function getArticles($id_cat) -> function getAnnonces_byCategory($id_cat).
    • function affichageAnnonce($id_cat) -> function getAnnonces_Images_byCategory($id_cat).

    2- $sql_lang n'est pas défini dans la fonction. Il manque :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
             $sql_lang = $_SESSION['lang'];

    3- et tant qu'à être EXPLICITE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          $affichage= affichageAnnonce($id_cat);
     
         foreach ($affichage as $a) {
    à remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          $annonces = getAnnonces_Images_byCategory($id_cat);
     
         foreach ($annonces as $annonce) {

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2021
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2021
    Messages : 81
    Par défaut
    Je n'ai pas bien compris ce que tu veux dire avec explicite. En te suivant, j'ai changé les noms des fonctions, sans arriver à afficher les annonces par catégorie. Peux-tu expliquer plus clairement ta vision? Donner un exemple, please

  10. #10
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut

    1. Qui est énoncé complètement et ne peut prêter à aucune contestation : Un texte de loi explicite.
    2. Qui s'exprime complètement et clairement sans laisser place à l'ambiguïté

    • Quand on appelle sa fonction getArticles(), alors qu'on veut récupérer des Annonces par Catégorie, ce n'est pas explicite.
    • Alors que getAnnonces_byCategory() : c'est clair ! *

    * Bon... on mélange français et anglais , mais... ça reste compréhensible !
    On peut tout mettre en français, ou tout en anglais aussi.
    A chacun de faire selon ses préférences.


    3- Montre ton nouveau code...

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2021
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2021
    Messages : 81
    Par défaut
    * Bon... on mélange français et anglais , mais... ça reste compréhensible !
    On peut tout mettre en français, ou tout en anglais aussi.
    A chacun de faire selon ses préférences.
    LOL, ce que j'ai compris c'est qu'on a juste changé le nom des fonctions.


    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
         function getAnnonces_byCategory($id_cat){
          global $bdd;
         $sql_lang = $_SESSION['lang'];
        $res = [];
     
        $sql = 'SELECT  A.* Except A.id
        , C.id as id, 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 1 = 1 
          AND id= :id_cat
      ';
     
    //pour Accueil et contact 
    if($id_cat==1 || $id_cat==20){
      $sql .= "  "; //On ajoute un lien, mais comment?
    }
     
    //Pour les autres catégories
    if(1< $id_cat< 20){ 
      $sql .=  $sql .= " AND  id = ".$id_cat." ";
    }
     
    //on fini par ajouter le order by
    $sql .= "   ORDER BY 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 getAnnonces_Images_byCategory($id_cat){
        global $bdd;
        $annonces = getAnnonces_byCategory($id_cat);
        $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;
     
      }

    et l'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
     <?php
            $id_cat = !empty($_GET['id']) ? trim($_GET['id']) : null;
            $annonces = getAnnonces_Images_byCategory($id_cat);
     
     
     
         foreach ($annonces as $annonce) {
            echo '<div class="annoncepubs">';
     
            $images = !empty($annonce['images']) ? $annonce['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'>" . $annonce['CATEGORIE'] . "</span>";
            echo "<span class='title'>" . $annonce['titre'] . "</span>";
            echo "<span class='comment'>" . $annonce['description'] . "</span>";
            echo "<span class='price'>" . $annonce['prix'] . "</span>";
            echo "<span class='date'>" . $annonce['created_date'] . "</span>";
     
     
            echo "</div>"; // fin div annoncepubs 
          }
     
     
     
           ?>

Discussions similaires

  1. [XL-2007] [TCD] Comment afficher les sous-totaux AVANT le détail ?
    Par fourchette dans le forum Excel
    Réponses: 3
    Dernier message: 10/03/2010, 07h28
  2. [Dojo] Afficher les sous elements d'un dossier dans une tree
    Par devkaty dans le forum Bibliothèques & Frameworks
    Réponses: 8
    Dernier message: 18/09/2009, 00h03
  3. Afficher les sous titres arabe dans une vidéo
    Par Coussati dans le forum Windows XP
    Réponses: 2
    Dernier message: 26/08/2009, 05h37
  4. [DOM] Menu déroulant et DOM. Afficher les sous-menus cachés
    Par glenouve dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/11/2007, 10h42
  5. Parcourir un dossier et afficher les sous-dossiers
    Par grenoult dans le forum VBA Access
    Réponses: 3
    Dernier message: 01/06/2007, 14h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo