menu deroulant css sans javascript lier a une base de donne

Petit nouveau ! | 9 Messages

25 avr. 2011, 00:46

boujour
voici mon probleme

jai une base de donne ayant un menu deroulant et l'ordre des lien est du genre 1.1.1 et est inscrit de la meme maniniere dans la dite base ...

en gros je veut utiliser les css sans javascript pour faire un menu deroulant en utilisant cette base de donne

javait pense au <ul> et au <li> mais je narrive pas a les places correctement soit que jai :

menu1
menu 1.1
menu 1.2
menu 2.1
et ainsi de suit sans avoir menu 2 et les autre

ce que je veut est :
menu 1
menu 1.1
menu 2
menu 2.1
menu 2.1.1
menu 3
et ainsi de suit

petit exemple de ma base de donne

nom niveau lien
simon 1 http://www.blabla.com
alain 1.1 http://www.bla.com
lise 1.1.1 http://www.google.com

donc mon probleme est pas de faire affiche mon menu déroulant je suis caspable si je le tape moi-meme .
cest bien de faire affiche mon menu avec les lien de ma base de donne et sur tout le fait de les placé dans les bon sous menu et dans le bonne ordre

si javait un exemple je pourrait ensuit me débrouiller moi même

je vous remercie davance pour votre aide

ViPHP
xTG
ViPHP | 7331 Messages

25 avr. 2011, 09:11

Quel est ton code actuel ? :)

Petit nouveau ! | 9 Messages

25 avr. 2011, 09:37

en gros la base est :

CSS
<style type="text/css">
ul ul {display: none; position: absolute; left: 144px; top: -1px; margin:0px; padding: 0px; border: 1px solid grey;}
li {list-style-type: none; position: relative; width: 140px; background-color: #E0E0E0; padding: 2px; margin: 0px}
li:hover {background-color: #FFFF70;}
li:hover ul.niveau2, li li:hover ul.niveau3 {display: block}
li.plus {background-position:right; background-image: url(illustrations/fdroite.gif); background-repeat: no-repeat; border-bottom: 1px solid grey;}
</style>

HTML
<ul class="niveau1">
<li>
Menu
<ul class="niveau2">
<li class="plus">
Extras
<ul class="niveau3">
<li>Demander la note</li>
<li>Draguer la serveuse</li>
</ul>
</li>
<li>Entr&eacute;e</li>
<li>Plat</li>
<li>Dessert</li>
<li>Caf&eacute;</li>
</ul>
</li>
</ul>

mais cela a ete pris sur un tutoriel ....
c'est le apres comment faire pour que 2.1.1 soit affiche comme 2.1.1 toujours en pense que ma base de donnes est comme dit precedament
c'est cela que jai aucune idee ... jai pense affche menu racine ensuite affiche menu sous mais sa marche pas soit que sa maffiche le premier menu racine et apres menu sous sans menu 2 ou tout est en menu sous ... soit :

menu1
menu 1.1
menu 1.2
menu 1.2.1
menu 2
menu 2.1
etc....

donc je suis pas mal dans une inpasse ...

Petit nouveau ! | 9 Messages

26 avr. 2011, 05:45

vue le manque de reponse je pense p-t m'etre mal expliquer
mon but est de faire une list en arbre de ma table menu
ma table menu repris dune ancienne base de donne est fait de la facon suivant :

champ=id,nom,addresse,niveau
par example

id=0000(int)
nom= 10.1.1(string)
add=www.google.ca(string)

niveau=10.1.1(string avec sa "regle decriture" soit 00.00.00 bien que nous puission seulement marque 10 et non pas 10.00.00 )

example produit fini en html
<ul class="niveau1">
<li>
10
<ul class="niveau2">
<li class="plus">
10.1
<ul class="niveau3">
<li><a href=www.google.ca >10.1.1</a></li>
<li>10.1.2</li>
</ul>
</li>
<li>11</li>
<li>12</li>
<li>13</li>
<li>14</li>
</ul>
</li>
</ul>
ma question est comment faire pour que les ul e, li et mes donnée se place comme il se doit et quel code pourrais-je utiliser pour ateindre mon objectif et svp une explication du dit code serait fortement apprecier ...

ViPHP
xTG
ViPHP | 7331 Messages

26 avr. 2011, 08:21

De la comparaison d'id mon cher, de la comparaison. :)
Pas très malin d'avoir stocké les niveaux dans une chaîne de caractère mais on peut s'en dépatouiller...
Il faut pouvoir savoir si d'une itération à une autre on change de niveau.
Soit $res la variable de retour de ta bdd avec toutes tes valeurs ordonnées, j'ai simplifié en n'indiquant que le niveau.
$res = array(
		0 => array('id' => "1"),
		1 => array('id' => "1.1"),
		2 => array('id' => "1.2"),
		3 => array('id' => "2"),
		4 => array('id' => "2.1"),
		5 => array('id' => "2.1.1"),
		6 => array('id' => "2.2"),
		7 => array('id' => "3")
	);
$niveau = 0; // avant affichage on se trouve au niveau 0
foreach($res as $key => $result_bdd)
{
  // on calcule le niveau du menu
  $niveau_courant = count(explode('.',$result_bdd['id']));
  if( $niveau_courant > $niveau ) // on passe à un niveau supérieur
    echo "<ul>\n";
  elseif( $niveau_courant < $niveau ) // niveau inférieur
    echo "</ul></li>\n";
  else // on reste au même niveau
    echo "</li>\n";
  // On affiche l'élément
  echo "<li>{$result_bdd['id']}";
  // mise à jour du niveau
  $niveau = $niveau_courant;
}
// on ferme les niveaux non fermés
while( $niveau > 0 )
{
  echo "</ul></li>\n";
  $niveau--;
}

Mammouth du PHP | 881 Messages

26 avr. 2011, 18:02

Pour te simplifier la vie dans la numérotation de tes éléments de liste, tu devrais explorer les possibilités des balises html suivantes:
<ul></ul> vs <ol></ol>
de même que les balises <dt> et <dd>

Elles feront une partie du travail pour toi.
Soyez artisans de paix

Petit nouveau ! | 9 Messages

29 avr. 2011, 07:58

jai reussi a regle mon probleme donc malheureusement jai pas bien pris le temps de comprendre tout le code donne mais je les sauvegarde pour des utilisation prochaine c sur ... mais javoue metre un peu compliquer la vie mais temps que sa marche

Code : Tout sélectionner

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <HTML> <HEAD> <title>tTitre</title> <meta http-equiv='Content-Type' content='text/html;charset=iso-8859-1' > <meta name='keywords' content='Keyword '> <meta name='description'content='tDescription '> </HEAD> <BODY> <p> Bonjour jaslkfjasdlkfjsdkl </p> <? print"<ul>"; mysql_connect('localhost','fdjkslfakl','bla'); mysql_select_db('johillqc_bd'); $tr_racine = "select niveau as niveau_r, nom as nom_r, lien as lien_r from page where id!=15 and niveau like '__' order by niveau"; $rep_racine = mysql_query($tr_racine) or die(mysql_error()."<BR>erreur<BR>$tr_racine"); $nb_rep_racine = mysql_num_rows($rep_racine); while ($list_racine = mysql_fetch_array($rep_racine)) { extract ($list_racine); print"<li>"; print $niveau_r; $tr_sous = "select niveau as niveau_s, nom as nom_s, lien as lien_s from page where niveau like '$niveau_r.__' order by niveau"; $rep_sous = mysql_query($tr_sous) or die(mysql_error()."<BR>erreur<BR>$tr_sous"); $nb_rep_sous = mysql_num_rows($rep_sous); if ($nb_rep_sous>0) print "<ul >"; while ($list_sous = mysql_fetch_array($rep_sous)) { extract ($list_sous); print"<li>"; print $niveau_s; $tr_sous_sous = "select niveau as niveau_s_s, nom as nom_s_s, lien as lien_s_s from page where niveau like '$niveau_s.__' order by niveau"; $rep_sous2 = mysql_query($tr_sous_sous) or die(mysql_error()."<BR>erreur<BR>$tr_sous_sous"); $nb_rep_sous2 = mysql_num_rows($rep_sous2); if ($nb_rep_sous2>0) print "<ul >"; while ($list_sous2 = mysql_fetch_array($rep_sous2)) {$nb_rep_sous2_max=$nb_rep_sous2; extract ($list_sous2); print"<li>"; print $niveau_s_s; }if ($nb_rep_sous2>0) print "</ul >"; }if ($nb_rep_sous>0) print "</ul >"; }if ($nb_rep_racine>0) print "</ul >"; ?> </BODY> </HTML>

je tien a dire que ce code est sous le <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> et le seule avertissement est que je suis pas en utf 8


mais maintenant j'attire votre attention sur le fait aussi que jai des section prive ... jai eu l'idees des creer le champ groupe mais j'arrive pas a les cacher avec se code ...

Code : Tout sélectionner

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <HTML> <HEAD> <title>tTitre</title> <meta http-equiv='Content-Type' content='text/html;charset=iso-8859-1' > <meta name='keywords' content='Keyword '> <meta name='description'content='tDescription '> </HEAD> <BODY> <p> Bonjour jaslkfjasdlkfjsdkl </p> <? print"<ul>"; mysql_connect('localhost','sdfdsfds','sdfds'); mysql_select_db('sdfsdfsdqc_bd'); $tr_racine = "select niveau as niveau_r, nom as nom_r, lien as lien_r from page where id!=15 and groupes='0' and niveau like '__' order by niveau"; $rep_racine = mysql_query($tr_racine) or die(mysql_error()."<BR>erreur<BR>$tr_racine"); $nb_rep_racine = mysql_num_rows($rep_racine); while ($list_racine = mysql_fetch_array($rep_racine)) { extract ($list_racine); print"<li>"; print $niveau_r; $tr_sous = "select niveau as niveau_s, nom as nom_s, lien as lien_s from page where niveau like '$niveau_r.__' and groupes='0' order by niveau"; $rep_sous = mysql_query($tr_sous) or die(mysql_error()."<BR>erreur<BR>$tr_sous"); $nb_rep_sous = mysql_num_rows($rep_sous); if ($nb_rep_sous>0) print "<ul >"; while ($list_sous = mysql_fetch_array($rep_sous)) { extract ($list_sous); print"<li>"; print $niveau_s; $tr_sous_sous = "select niveau as niveau_s_s, nom as nom_s_s, lien as lien_s_s from page where niveau like '$niveau_s.__' and groupes=0 order by niveau"; $rep_sous2 = mysql_query($tr_sous_sous) or die(mysql_error()."<BR>erreur<BR>$tr_sous_sous"); $nb_rep_sous2 = mysql_num_rows($rep_sous2); if ($nb_rep_sous2>0) print "<ul >"; while ($list_sous2 = mysql_fetch_array($rep_sous2)) {$nb_rep_sous2_max=$nb_rep_sous2; extract ($list_sous2); print"<li>"; print $niveau_s_s; }if ($nb_rep_sous2>0) print "</ul >"; }if ($nb_rep_sous>0) print "</ul >"; }if ($nb_rep_racine>0) print "</ul >"; ?> </BODY> </HTML>

Mammouth du PHP | 881 Messages

29 avr. 2011, 20:56

Bonjour,

si le problème annoncé dans le sujet est réglé, affiche "réglé" sur ton fil.

pour ton autre question, lance un nouveau fil.
Soyez artisans de paix