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

Langage PHP Discussion :

rendre actif un onglet de menu


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 52
    Par défaut rendre actif un onglet de menu
    Bonjour,

    Je cherche à rendre actif un onglet de menu dont le nom et le texte correspondant sont issus d'une base de donnée.

    Affichage du menu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $select = 'SELECT * FROM menu';   
    $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );    
     
    echo '<div class="menu">';  
     
    while($row = mysql_fetch_array($result))  
    { 
    echo '<a href="index.php?nom='.$row['nom'].' & texte='.$row['texte'].'" class="bouton">'.$row['nom'].'</a><p>';  
    } 
     
    echo '</div>';
    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonsoir,

    Crée un style css pour la class actif.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while($row = mysql_fetch_array($result))  
    { 
     $actif = (isset($_GET['nom']) and $_GET['nom'] == $row['nom'])?'actif':'bouton';
    echo '<a href="index.php?nom='.$row['nom'].' & texte='.$row['texte'].'" class="'.$actif.'">'.$row['nom'].'</a><p>';  
    }

    A+.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 52
    Par défaut
    J'ai défini dans le CSS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .actif {
         display: block; ........... }
    mais ça fonctionne pas mieux ....

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Citation Envoyé par t671 Voir le message
    mais ça fonctionne pas mieux ....
    Tu peux nous expliquer où en veux-tu venir, ce qui ne fonctionne pas

    A+.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 52
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Tu peux nous expliquer où en veux-tu venir, ce qui ne fonctionne pas

    A+.
    Quand je cliques sur un onglet qui a la classe "bouton", le texte correspondant s'affiche bien dans <div class="frame">, mais le bouton ne garde pas la classe "actif"

    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
    .bouton {
         display: block;
         width: 130px;
         height: 17px; ..............
    }
    .bouton:hover {
         ..............
    }
    .actif {
         ...............
    }
     
    <?php
    $select = 'SELECT * FROM menu';  
    $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );   
     
    echo '<div class="menu">'; 
     
    while($row = mysql_fetch_array($result))  
    { 
     $actif = (isset($_GET['nom']) and $_GET['nom'] == $row['nom'])?'actif':'bouton';
    echo '<a href="index.php?nom='.$row['nom'].' & texte='.$row['texte'].'" class="'.$actif.'">'.$row['nom'].'</a><p>';  
    }
     
    echo '</div>';
    echo '<div class="frame">'; 
    echo $_GET['texte'];
    echo '</div>'; 
     
    ?>

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Par défaut
    Je suis peut être le seul mais je ne comprend pas très bien quel résultat veut tu obtenir. Dis nous ou tu veut aller et nous te dirons quel chemin prendre .

    Prend ton temps et décris nous ce que tu veut faire.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 52
    Par défaut
    Citation Envoyé par aliogan Voir le message
    Je suis peut être le seul mais je ne comprend pas très bien quel résultat veut tu obtenir. Dis nous ou tu veut aller et nous te dirons quel chemin prendre .

    Prend ton temps et décris nous ce que tu veut faire.
    J'ai un menu qui est composé de bouton (ou onglet).
    Ces boutons ont une certaine forme, couleur .....
    Quand je clique sur un bouton, la page correspondante s'affiche dans une div (ou frame), et je voudrais que le bouton prenne une classe différente(couleur.....), tant que la page est affichée.

    Dans mon CSS, j'ai donc mon bouton en affichage classique : .bouton {
    Mon bouton quand la souris passe dessus : .bouton:hover {
    Et je voudrais un bouton quand j'affiche la page correspondante (page actrive) : .actif {


  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Re,

    class="'.$actif.'">'.$row['nom'].'</a><p>';
    Supprime la balise <p>.
    Regarde ensuite dans le html généré si la classe est égale à actif ou bouton.

    A+.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 52
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Re,


    Supprime la balise <p>.
    Regarde ensuite dans le html généré si la classe est égale à actif ou bouton.

    A+.
    J'ai supprimé la balise <p>, et la classe est (toujours) = à bouton.

    Je ne comprends pas pourquoi tu m'as fait supprimer cette balise qui n'est là que pour l'esthétique ....

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2010
    Messages : 86
    Par défaut
    Tel que le code est écrit, la classe "actif" devrait être attribuée quand le lien répond à certaines conditions. D'après cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $actif = (isset($_GET['nom']) and $_GET['nom'] == $row['nom'])?'actif':'bouton';
    Puisque la classe actif n'est jamais attribuée, la première chose à faire est de vérifier si ta condition est bien remplie, en ajoutant par exemple avant ou après la ligne ce bout de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(isset($_GET['nom']) and $_GET['nom'] == $row['nom']){echo 'il devrait y avoir un lien actif';}
    si le message s'affiche, je ne vois pas d'où peut provenir le bug. Mais s'il ne s'affiche pas, cela veut dire que ta condition:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_GET['nom'] == $row['nom']
    n'est jamais remplie.

    Ce qui peut provenir de caractères blancs mal placés par exemple.

    Je vois ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<a href="index.php?nom='.$row['nom'].' & texte='.$row['texte'].'" class="'.$actif.'">'.$row['nom'].'</a><p>';
    qu'en construisant ton lien tu mets un espace juste avant le '&'. Pour peu que cet espace soit pris en compte dans l'url alors qu'il n'existe pas dans ta base, les deux variables ne seront jamais égales, et tu n'auras jamais de lien actif. Je te conseille de supprimer cet espace, ou de faire subir un trim() à tes variables avant de les comparer.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 52
    Par défaut
    Merci Fenn_ ..... Effectivement, j'ai enlevé les espaces autour du & et ça fonctionne .....

    A +++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 12/11/2010, 15h23
  2. [MySQL] rendre actif le lien d'un menu dynamique
    Par Stéph utilisateur d'acces dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 03/10/2009, 18h19
  3. Rendre une option d'un menu non sélectionnable
    Par zoziobibe dans le forum Visual C++
    Réponses: 5
    Dernier message: 28/08/2006, 08h14
  4. Réponses: 1
    Dernier message: 23/05/2006, 20h10
  5. Rendre invisibles des onglets de formulaires
    Par cabort josé dans le forum IHM
    Réponses: 4
    Dernier message: 16/11/2004, 18h48

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