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 des sous onglets avec un foreach [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 238
    Par défaut afficher des sous onglets avec un foreach
    Bonjour à tous et à toutes.
    J'aimerais faire un menu horizontal avec des foreach alimentés par une bdd.
    C'est les sous onglets qui me pose problèmes car je ne sais pas comment faire pour que les balises <ul> et </ul> soit pris en compte qu’une seul fois.
    Voici le contenu du array $onglet
    Array ( [accueil] => Accueil [page_contact] => Contact [rubrique_1] => Rubrique 1 [test] => test [test-1] => test 1 [test-2] => test 2 [fenetres] => Fenêtres )
    Celui du array sous_onglet
    Array (
    [accueil] => Array (
    [0] => Array ( [nom_onglet] => Accueil [lien_onglet] => accueil [cor_lien_menu] => accueil [nom_s_ong] => Accueil bis [lien_s_ong] => accueil_bis )
    [1] => Array ( [nom_onglet] => Accueil [lien_onglet] => accueil [cor_lien_menu] => accueil [nom_s_ong] => Accueil Bis 2 [lien_s_ong] => accueil_bis_2 ) )

    [page_contact] => Array (
    [0] => Array ( [nom_onglet] => Contact [lien_onglet] => page_contact [cor_lien_menu] => [nom_s_ong] => [lien_s_ong] => ) )

    [rubrique_1] => Array (
    [0] => Array ( [nom_onglet] => Rubrique 1 [lien_onglet] => rubrique_1 [cor_lien_menu] => rubrique_1 [nom_s_ong] => Sous onglet rubrique [lien_s_ong] => sous_onglet_rubrique ) )
    [test] => Array (
    [0] => Array ( [nom_onglet] => test [lien_onglet] => test [cor_lien_menu] => [nom_s_ong] => [lien_s_ong] => ) )
    [test-1] => Array (
    [0] => Array ( [nom_onglet] => test 1 [lien_onglet] => test-1 [cor_lien_menu] => [nom_s_ong] => [lien_s_ong] => ) )
    [test-2] => Array (
    [0] => Array ( [nom_onglet] => test 2 [lien_onglet] => test-2 [cor_lien_menu] => [nom_s_ong] => [lien_s_ong] => ) )
    [fenetres] => Array ( [0] => Array ( [nom_onglet] => Fenêtres [lien_onglet] => fenetres [cor_lien_menu] => [nom_s_ong] => [lien_s_ong] => ) ) )
    Voici mon code.
    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
     
    $req_menu_hor = $bdd->prepare("SELECT nom_onglet, lien_onglet, cor_lien_menu, nom_s_ong, lien_s_ong FROM menu 
    	LEFT JOIN sous_menu ON menu.lien_onglet = sous_menu.cor_lien_menu WHERE auth_view <= :auth_view_level");
    	$req_menu_hor->bindValue('auth_view_level', $level, PDO::PARAM_INT);
    	$req_menu_hor->execute();
    	$onglet = array(); // déclare le tableau
    	$sous_onglet = array();
     
    	while ($res_menu_hor = $req_menu_hor->fetch())
    		{
    			$onglet[$res_menu_hor['lien_onglet']] = $res_menu_hor['nom_onglet']; // alimente le tableau
    			$sous_onglet[$res_menu_hor['lien_onglet']][] = $res_menu_hor;
    		}
    	$req_menu_hor->closeCursor();
    	//print_r ($onglet);
    	//print_r ($rubrique);	
    	echo"<div id='cssmenu'><ul>";
    	$dernier_onglet = end($onglet);
     
    	foreach ($onglet as $key => $values)
    		{
    			echo '<li class="has-sub';if(urlencode($key) == $page) {echo' active';} if ($key === $dernier_onglet) {echo' last';}echo'">';
    			echo'<a href="'.ROOTPATH.'/index.php?page='.urlencode($key).'"><span>'.stripslashes($values).'';
     
    				echo'</span></a>';
    			echo'</li>';
    		}
    echo"</ul></div>";
    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ou est le foreach pour les sous-onglets ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 238
    Par défaut
    Désolé de ma réponse tardive, j'ai du m’absenter.
    Merci de ton aide; j'avais enlevé volontairement le second foreach car à force de faire des tests c'était incompréhensible.
    Voici mon code de dépars avec le second foreach
    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
     
    $req_menu_hor = $bdd->prepare("SELECT nom_onglet, lien_onglet, cor_lien_menu, nom_s_ong, lien_s_ong FROM menu 
    	LEFT JOIN sous_menu ON menu.lien_onglet = sous_menu.cor_lien_menu WHERE auth_view <= :auth_view_level");
    	$req_menu_hor->bindValue('auth_view_level', $level, PDO::PARAM_INT);
    	$req_menu_hor->execute();
    	$onglet = array(); // déclare le tableau
    	$sous_onglet = array();
     
    	while ($res_menu_hor = $req_menu_hor->fetch())
    		{
    			$onglet[$res_menu_hor['lien_onglet']] = $res_menu_hor['nom_onglet']; // alimente le tableau
    			$sous_onglet[$res_menu_hor['lien_onglet']][] = $res_menu_hor;
    		}
    	$req_menu_hor->closeCursor();
    	//print_r ($onglet);
    	//print_r ($sous_onglet);	
    	echo"<div id='cssmenu'><ul>";
    	$dernier_onglet = end($onglet);
     
    	foreach ($sous_onglet as $key => $values)
    		{
    			echo '<li class="has-sub';if(urlencode($key) == $page) {echo' active';} if ($key === $dernier_onglet) {echo' last';}echo'">';
    			echo'<a href="'.ROOTPATH.'/index.php?page='.urlencode($key).'"><span>'.stripslashes($onglet[$key]).'';
    			$lastKey = array_pop(array_keys($cles[$valeurs['cor_lien_menu']]));
    			echo'<ul>';
    						foreach ($values as $value)
    							{
    								echo '<li><a href="'.ROOTPATH.'/index.php?page='.urlencode($key).'&amp;prod='.urlencode($value['lien_s_ong']).'" title="accédez au page du commerce." style="color:#fff">
    								'.stripslashes($value['nom_s_ong']).'</a></li>';
    							}
    						echo'</ul>';
    				echo'</span></a>';
    			echo'</li>';
    		}
    echo"</ul></div>";
    Le souci c'est qu'il y a un sous onglet vierge qui s’ouvre sous les onglets qui normalement n'en on pas.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ton UL s'ouvre ligne 25 et se ferme ligne 31.
    A quoi correspond le UL fermé ligne 35 ?
    Même chose pour la fermeture de LI ligne 33.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éclairé
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 238
    Par défaut
    l' UL ligne 25 ouvre les sous onglets et celui ligne 31 les fermes.
    Ces Ul devrais se mettre uniquement si il y a des sous onglet à afficher.(si cor_lien_menu n'est pas vide)
    Ces UL devrais s'afficher qu'une seule fois même si il y a plusieurs LI (sous onglet) à l’intérieure.

    le UL fermé ligne 35 correspond à la fermeture du menu général.
    il est ouvert ligne 17.

    Même chose pour la fermeture de LI ligne 33, il ferme les onglet.

    J'arrive à afficher se qui correspond à : lien_onglet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sous_onglet[$key]['0']['lien_onglet']
    Comment faire pour afficher cor_lien_menu en remplacent ['0'] par une variable car des fois il peut y avoir plusieurs ligne ['0']['1']

    Si je comprend comment afficher cor_lien_menu j'arriverais à tous faire mais y a rien à faire j'y arrive pas.

  6. #6
    Membre éclairé
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 238
    Par défaut
    J'ai bien réduit mon script mais je sais toujours pas comment faire avec mes UL.
    Si quelqu'un a une solution je suis preneur.

    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
     
    $req_menu_hor = $bdd->prepare("SELECT nom_onglet, lien_onglet, cor_lien_menu, nom_s_ong, lien_s_ong FROM menu 
    	LEFT JOIN sous_menu ON menu.lien_onglet = sous_menu.cor_lien_menu WHERE auth_view <= :auth_view_level AND auth_view <= :auth_view_level ORDER BY ordre_aff, ordre_s_ong ASC");
    	$req_menu_hor->bindValue('auth_view_level', $level, PDO::PARAM_INT);
    	$req_menu_hor->execute();
    	$onglet = array(); // déclare le tableau
    	$sous_onglet = array();
     
    	while ($res_menu_hor = $req_menu_hor->fetch())
    		{
    			$onglet[$res_menu_hor['lien_onglet']] = $res_menu_hor['nom_onglet']; // alimente le tableau
    			$sous_onglet[$res_menu_hor['lien_onglet']][] = $res_menu_hor;
    		}
    	$req_menu_hor->closeCursor();
    	//print_r ($onglet);
    	//print_r ($sous_onglet[$key]);	
    	echo"<div id='cssmenu'><ul>";
    	$dernier_onglet = end($onglet);
    	foreach ($sous_onglet as $key => $resultat_values)
    		{
    			//print_r ($sous_onglet[$key]);	
    			$lastKey = array_pop(array_keys($sous_onglet[$key]));
    			echo '<li class="has-sub';if(urlencode($key) == $page) {echo' active';} if ($key === $dernier_onglet) {echo' last';}echo'">';
    			echo'<a href="'.ROOTPATH.'/index.php?page='.urlencode($key).'"><span>'.stripslashes($onglet[$key]).'';
    			foreach($resultat_values as $values)
    				{
    					echo'<ul>';
    					echo '<li><a href="'.ROOTPATH.'/index.php?page='.urlencode($key).'&amp;prod='.urlencode($values['cor_lien_menu']).'" 
    					title="accédez au page du commerce." style="color:#fff">'.stripslashes($values['nom_s_ong']).'  - '.$values.'</a></li>';
    					echo'</ul>';				
    				}
    			echo'</span></a>';
    			echo'</li>';
    		}

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

Discussions similaires

  1. afficher des donnees argb avec direct3d
    Par d'Oursse dans le forum Windows
    Réponses: 2
    Dernier message: 29/07/2007, 17h22
  2. [XI] construire des sous-rapports avec un seul paramétre de saisie
    Par campia dans le forum SAP Crystal Reports
    Réponses: 14
    Dernier message: 15/06/2007, 14h56
  3. Comment gérer des sous ensembles avec des "enum" ?
    Par ogattaz dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2007, 10h29
  4. Problème d'affiche d'une list avec c:forEach
    Par lili2704 dans le forum Struts 1
    Réponses: 2
    Dernier message: 19/03/2007, 17h49
  5. [Debutant] Afficher des chaines unicodes avec println
    Par MichaelB dans le forum Langage
    Réponses: 2
    Dernier message: 10/01/2007, 19h39

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