PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 19-10-2010 20:19:15

quaresma
Membre
Inscription : 10-05-2009
Messages : 42

menu en php/sql

Bonjour a toutes et tous,
je voulais savoir si quelqu'un pouvait m'aider à faire un menu en PHP/SQL comme celui-ci :

http://css.developpez.com/galerie/demo/ … roulant2/#

En récupérant les titres "menu1","menu1",etc. à partir d'une SGBD SQL et les sous-menu également.

J'ai des notions en php/sql, il me faudrait juste un petit coup de pouce s'il vous plait.

Pour le moment j'ai ceci :



J'ai deux tables comme cela :

CREATE TABLE rubrique (numrubrique INT NOT NULL, nomrubrique VARCHAR (20) NOT NULL, numssrubrique INT NOT NULL, PRIMARY KEY (numrubrique));

CREATE TABLE ss_rubrique (numssrubrique INT NOT NULL AUTO_INCREMENT, nomssrubrique VARCHAR (40) NOT NULL, photossrubrique VARCHAR (40), numrubrique INT NOT NULL, PRIMARY KEY (numssrubrique));

Elles contiennent les données suivantes :

INSERT INTO rubrique (numrubrique, nomrubrique, numssrubrique) VALUES ("1", "écrits", "1"), ("2", "scènes", "2");

INSERT INTO ss_rubrique (numssrubrique, nomssrubrique, photossrubrique, numrubrique) VALUES ("1", "théâtre", "foto1.gif", "1"), ("2", "enfance et jeunesse", "foto2.gif", "2");

J'ai trois fichiers.

Un fichier appelé functions.js qui contient la fonction pour le menu :

function afficheMenu(obj){
   
    var idMenu     = obj.id;
    var idSousMenu = 'sous' + idMenu;
    var sousMenu   = document.getElementById(idSousMenu);
   
    /*****************************************************/
    /**    on cache tous les sous-menus pour n'afficher    **/
    /** que celui dont le menu correspondant est cliqué **/
    /** où 4 correspond au nombre de sous-menus         **/
    /*****************************************************/
    for(var i = 1; i <= 4; i++){
        if(document.getElementById('sousmenu' + i) && document.getElementById('sousmenu' + i) != sousMenu){
            document.getElementById('sousmenu' + i).style.display = "none";
        }
    }
   
    if(sousMenu){
        //alert(sousMenu.style.display);
        if(sousMenu.style.display == "block"){
            sousMenu.style.display = "none";
        }
        else{
            sousMenu.style.display = "block";
        }
    }
   
}

Un fichier nommé style.css qui contient les styles pour le menu :

*{
    margin:0;
    padding:0;
}
#menu{
    width:150px;
    margin:20px auto 0 auto;
}
.menu, .sousmenu{
    text-align:center;
}
.menu{
    height:18px;
    width:150px;
    padding:2px 0;
    background:#404040;
    color:#fff;
}
.sousmenu{
    height:18px;
    width:150px;
    padding:1px 0;
    background:#808080;
    color:#fff;
}
.menu a{
    display:block;
    width:100%;
    height:100%;
    color:#fff;
    font-family:arial,sans-serif;
    font-size:12px;
    font-weight:bold;
    text-decoration:none;
    background:#404040;
}
.sousmenu a{
    display:block;
    width:100%;
    height:100%;
    color:#123456;
    font-family:arial,sans-serif;
    font-size:12px;
    font-weight:bold;
    text-decoration:none;
}
.menu a:hover, .sousmenu a:hover, .menu a:active, .sousmenu a:active, .menu a:focus, .sousmenu a:focus{
    color:#654321;
}

La page sur laquelle j'appelle le menu dynamiquement ainsi que les fichiers "functions.js" et "style.css"  :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/url]">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="keywords" content=" />
<meta name="description" content=" />
<title></title>
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
     <link rel="stylesheet" href="menu/style.css" type="text/css" />
     <script type="text/javascript" src="menu/functions.js"></script>
</head>
<body>
<table width="900" height="421" border="0" align="center" bgcolor="#000000">
  <tr>
    <td width="22"> </td>
    <td width="145" valign="top"><br />
    <?php include"menu/menu.php" ?>; </td>
    <td width="682" valign="top"><br />

Puis, le fichier du menu :

<?php
require("identification/connexion_sql.php");
$db = mysql_connect($host_db,$login_db,$password_db) or die ("impossible de se connecter a la base".mysql_error());
mysql_select_db($name_db,$db) or die ("base inexistante".mysql_error());
$req = mysql_query("SELECT * FROM rubrique, ss_rubrique WHERE rubrique.numssrubrique = ss_rubrique.numssrubrique AND rubrique.numrubrique = ss_rubrique.numrubrique") or die ("impossible d'effectuer la requête");
$arrayFlag = array();
while($shopone = mysql_fetch_array($req)){
$nomrubrique = stripslashes($shopone['nomrubrique']);
$nomssrubrique = stripslashes($shopone['nomssrubrique']);
$nomrubrique2 = utf8_encode($nomrubrique);
$nomssrubrique2 = utf8_encode($nomssrubrique);
if( !isset($arrayFlag[$shopone['numrubrique']])) // On vérifie que le champ n'a pas été déjà affiché
{
print'
<div id="menu">
    <div class="menu" id="menu1" onclick="afficheMenu(this)">
        <a href="#">'
.$nomrubrique2.'</a>
    </div>'
;
$arrayFlag[$shopone['numrubrique']] = true;} // On signale qu'on a affiché cette catégorie au moins une fois

print'<div id="sousmenu1" style="display:none">
        <div class="sousmenu">
            <a href="#">'
.$nomssrubrique2.'</a>
        </div>
        </div>
        </div>'
;  
 }
 mysql_close();
?>

Pour l'instant, le résultat n'est pas terrible comme vous pourrez le constater :

[url]http://www.la-grange-sardieres.fr/site Fab/presentation.php[/url]

Je voudrai le même résultat que le menu pris en exemple, mais dans ce que j'ai fait il y a quelque chose qui ne va pas.


Merci beaucoup pour votre aide.

Edit : ajout le type de code pour la colorisation de la syntaxe (par exemple code=php)

Hors ligne

#2 19-10-2010 21:31:18

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : menu en php/sql

salut,

je ne comprend pas exactement ce qui te manque ?

dans ton exemple tu a le source html de base que tu doit respecter

<div id="sousmenu1" style="display:none">
        <div class="sousmenu">
            <a href="#">Sous-Menu 1.1</a>
        </div>
        <div class="sousmenu">

            <a href="#">Sous-Menu 1.2</a>
        </div>
        <div class="sousmenu">
            <a href="#">Sous-Menu 1.3</a>
        </div>
        <div class="sousmenu">
            <a href="#">Sous-Menu 1.4</a>

        </div>
    </div>

Il faut donc que lors de l'affichage :
- tu affiche le menu principal (sur ce principe <div class="menu" id="menu1" onclick="afficheMenu(this)">
        <a href="#">Menu 1</a>
    </div>)
- tu affiche les sous menu dans le modèle que j'ai mis au dessus

le plus simple c'est de faire une requête sur la table rubrique et lors du parcours des résultats, un requête sur la seconde table en fonction de la clef primaire de la première table.

Le must est de faire une seul requête et de gérer le changement de menu dans la boucle de traitement du résultat.

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#3 19-10-2010 22:07:42

quaresma
Membre
Inscription : 10-05-2009
Messages : 42

Re : menu en php/sql

C'est ce que j'ai fait dans le code de mon menu non ??

Hors ligne

#4 20-10-2010 12:54:25

quaresma
Membre
Inscription : 10-05-2009
Messages : 42

Re : menu en php/sql

quelqu'un pour m'éclairer s'il vous plait ?

Hors ligne

#5 20-10-2010 13:18:18

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : menu en php/sql

Saluton,
J'ai déjà dit de nombreuses fois sur ce forum que construire un menu à partir d'une requête sur une base de données, sauf à mettre le résultat dans un système de cache, constituait une aberration.
Rien de plus invariant et de plus fréquemment invoqué qu'un menu c'est donc très contre-productif de solliciter la base de données à chaque fois qu'on veux afficher ledit menu.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#6 20-10-2010 17:15:51

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : menu en php/sql

Bonjour,

Je me permets juste de pondérer ce que viens de dire Maljuna car lorsque l'on désire construire des menus dynamiquement avec une gestion des droits d'accès par utilisateur et par menu, le recours à une base de données pour la construction d'un menu devient indispensable. Je rejoins ce qu'il vient de dire pour tout menu statique ou tout menu dont le contenu à rendre disponible est prédictible.

Dernière modification par Jc (20-10-2010 17:19:15)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#7 20-10-2010 17:19:56

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : menu en php/sql

salut,

@quarema : non  tu affiche
<div id="sousmenu1" style="display:none">
       <div class="sousmenu">
           <a href="#">'.$nomssrubrique2.'</a>
       </div>
       </div>
       </div>'; 
a chaque 'tour' du while, hors il te faut afficher que le lien et conclure les div en cas de changement de sous menu (un lien ici c'est <div class="sousmenu">
           <a href="#">'.$nomssrubrique2.'</a>
       </div>).

@MK : c'est à cause de toi que j'ai développer un système de cache rudimentaire :-)~ (qui du menu est passé au contenu qui tout compte fait, hormis un forum ne change pas tous les jours). Mais cela à été intéressant à faire.

Edit : JC : effectivement c'est un soucis qui ma fait mettre mon menu admin en cache XD (enfin par erreur j'ai corrigé depuis)

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#8 20-10-2010 19:52:05

quaresma
Membre
Inscription : 10-05-2009
Messages : 42

Re : menu en php/sql

J'ai fait des modifications, mais le résultat n'est pas encore terrible sad

Voici mon nouveau code :

<?php
require("identification/connexion_sql.php");
$db = mysql_connect($host_db,$login_db,$password_db) or die ("impossible de se connecter a la base".mysql_error());
mysql_select_db($name_db,$db) or die ("base inexistante".mysql_error());
$req = mysql_query("SELECT * FROM rubrique, ss_rubrique WHERE ss_rubrique.numrubrique = rubrique.numrubrique ORDER BY rubrique.numrubrique ASC, ss_rubrique.numssrubrique") or die ("impossible d'effectuer la requête");
$arrayFlag = array();
print'<div id="menu">';
while($shopone = mysql_fetch_array($req)){
$nomrubrique = stripslashes($shopone['nomrubrique']);
$nomssrubrique = stripslashes($shopone['nomssrubrique']);
$nomrubrique2 = utf8_encode($nomrubrique);
$nomssrubrique2 = utf8_encode($nomssrubrique);
if( !isset($arrayFlag[$shopone['numrubrique']])) // On vérifie que le champ n'a pas été déjà affiché
{

print'
  <div class="menu" id="menu'
.$shopone['numrubrique'].'" onclick="afficheMenu(this)">
    <a href="#">'
.$nomrubrique2.'</a>
  </div>'
;
 
$arrayFlag[$shopone['numrubrique']] = true;} // On signale qu'on a affiché cette catégorie au moins une fois

if( !isset($arrayFlag[$shopone['numrubrique']])) // On vérifie que le champ n'a pas été déjà affiché
{

print'<div id="sousmenu'.$shopone['numrubrique'].'" style="display:none">
          <div class="sousmenu">
          <a href="#">'
.$nomssrubrique2.'</a>
    </div>'
;  
 }else{
 print'<div class="sousmenu">
          <a href="#">'
.$nomssrubrique2.'</a>
    </div>'
;  
    }
 }
print'</div>';
 mysql_close();
?>

Puis le résultat :

http://www.la-grange-sardieres.fr/site% … tation.php

Merci

Hors ligne

#9 21-10-2010 07:51:04

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : menu en php/sql

Jc a écrit :

Je me permets juste de pondérer ce que viens de dire Maljuna car lorsque l'on désire construire des menus dynamiquement avec une gestion des droits d'accès par utilisateur et par menu, le recours à une base de données pour la construction d'un menu devient indispensable. Je rejoins ce qu'il vient de dire pour tout menu statique ou tout menu dont le contenu à rendre disponible est prédictible.

Permets-toi, permets-toi, ce forum est là aussi pour confronter des points de vue.
Je maintiens cependant que, même dans les cas que tu évoques, il faut réfléchir à une organiser du code qui ne nécessite pas que les menus soient générés à chaque sollicitation.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#10 21-10-2010 08:10:33

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : menu en php/sql

salut,

il te manque le style="display:none" dans le  <div class="sousmenu">

regarde le source html du lien que tu a donné dans ton 1er message et compare smile

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#11 21-10-2010 11:43:15

quaresma
Membre
Inscription : 10-05-2009
Messages : 42

Re : menu en php/sql

j'ai fait une modification dans le code mais ce n'est pas encore cela :

<?php
require("identification/connexion_sql.php");
$db = mysql_connect($host_db,$login_db,$password_db) or die ("impossible de se connecter a la base".mysql_error());
mysql_select_db($name_db,$db) or die ("base inexistante".mysql_error());
$req = mysql_query("SELECT * FROM rubrique, ss_rubrique WHERE ss_rubrique.numrubrique = rubrique.numrubrique ORDER BY rubrique.numrubrique ASC, ss_rubrique.numssrubrique") or die ("impossible d'effectuer la requête");
$arrayFlag = array();
print'<div id="menu">';
while($shopone = mysql_fetch_array($req)){
$nomrubrique = stripslashes($shopone['nomrubrique']);
$nomssrubrique = stripslashes($shopone['nomssrubrique']);
$nomrubrique2 = utf8_encode($nomrubrique);
$nomssrubrique2 = utf8_encode($nomssrubrique);
if( !isset($arrayFlag[$shopone['numrubrique']])) // On vérifie que le champ n'a pas été déjà affiché
{

print'
  <div class="menu" id="menu'
.$shopone['numrubrique'].'" onclick="afficheMenu(this)">
    <a href="#">'
.$nomrubrique2.'</a>
  </div>
  <div id="sousmenu'
.$shopone['numrubrique'].'" style="display:none">';
 
$arrayFlag[$shopone['numrubrique']] = true;} // On signale qu'on a affiché cette catégorie au moins une fois

print'
          <div class="sousmenu">
          <a href="#">'
.$nomssrubrique2.'</a>
    </div>'
;  
 }
print'</div>';
 mysql_close();
?>

Hors ligne

#12 21-10-2010 11:59:41

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : menu en php/sql

hum vire les

<meta name="keywords" content=" />
<meta name="description" content=" />

qui ne servent pas, et qui mettent le brin dans le code html (manque un " dans champ pour conclure le champ content ..)

je ne sais pas si c'est ça qui est la source du problème ça sera mieux

tu ne ferme pas le div "sousmenuX" je pense que le soucis est la !
donc avant d'afficher le menu suivant il faut fermer le sousmenu précent !
</div>
                    <div class="sousmenu">
                    <a href="#">autres publications</a>
        </div>   <============== manque un </div> ici
    <div class="menu" id="menu2" onclick="afficheMenu(this)">
        <a href="#">scènes</a>

    </div>


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#13 21-10-2010 12:01:16

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : menu en php/sql

En outre, un menu avec sous-menu est bien mieux mis en œuvre avec des listes imbriquées <ul><li></li></ul> qu'avec des div.
comme illustrer ici, par exemple : Créer des menus simples en CSS


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#14 21-10-2010 12:06:54

quaresma
Membre
Inscription : 10-05-2009
Messages : 42

Re : menu en php/sql

moogli a écrit :

tu ne ferme pas le div "sousmenuX" je pense que le soucis est la !
donc avant d'afficher le menu suivant il faut fermer le sousmenu précent !
</div>
                    <div class="sousmenu">
                    <a href="#">autres publications</a>
        </div>   <============== manque un </div> ici
    <div class="menu" id="menu2" onclick="afficheMenu(this)">
        <a href="#">scènes</a>

    </div>

Justement, j'essaie de résoudre ce problème, mais je n'arrive pas à formuler le code...:(

Hors ligne

#15 21-10-2010 12:26:56

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : menu en php/sql

Cela ce fait lorsque tu realise la cesure entre les menus


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#16 21-10-2010 12:37:32

quaresma
Membre
Inscription : 10-05-2009
Messages : 42

Re : menu en php/sql

moogli a écrit :

Cela ce fait lorsque tu realise la cesure entre les menus

Je sais, mais je fais plein de test et je n'obtient pas le résultat voulu.
Je suis vraiment perdu là...:(

Hors ligne

#17 22-10-2010 20:17:31

quaresma
Membre
Inscription : 10-05-2009
Messages : 42

Re : menu en php/sql

Bonsoir,
j'ai fait pas mal de modifications.

Voici le code de la page "presentation.php" :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/url]">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="keywords" content=" "/>
<meta name="description" content=" "/>
<title></title>
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
   <link rel="stylesheet" href="css/style_menu.css" type="text/css" />
   <script type="text/javascript" src="js/functions.js"></script>
<style type="text/css">
<!--
body {
  margin-top: 0px;
}
-->
</style></head>
<body bgcolor="#333333">
  <table width="1050" border="0" align="center" cellpadding="0" cellspacing="0" style="background: #000; height: 421px; min-height: 421px;">
    <tr>
      <td colspan="3" style="height: 50px; min-height: 50px; max-height: 50px;"> </td>
    </tr>
    <tr>
      <td width="183" valign="top" style="width: 145px;"><?php include"menu/menu.php" ?></td>
      <td width="850" style="width: 682px; background: #fff;">contenu</td>
      <td width="17" style="background: #000;"> </td>
  </tr>
</table>

</body>
</html>

Voici le code du CSS :

#menu {
width: 150px;
background: #000;
margin: 0;
}
.menu_niv2 { display: none; }
.menu_niv1 a {
display: block;
background: #333;
color: #fff;
text-decoration: none;
text-align: center;
}
.menu_niv1 a:hover {
  display: block;
  background: #666;
  color: #fff;
  text-decoration: underline;
  text-align: center;
}
.menu_niv2 a {
  color: #333;
  background: #ccc;
  text-decoration: none;
  text-align: center;
  display: block;
}
.menu_niv2 a:hover {
  color: #333;
  background: #aaa;
  text-decoration: underline;
  text-align: center;
  display: block;
}

Voici le code du js :


function afficheMenu(menu) {
  // generation du nom du sous menu que l'on veut gerer (afficher / cacher)
  var sousMenu='sous' + menu;
  // on recupere son etat
  var etatSousMenu=document.getElementById(sousMenu).style.display;
  // on cree un array de tous les menus de niveau 1, donc ceux qui ont la classe 'menu_niv1'
  var listeNiv1=document.getElementsByClassName('menu_niv1');
  // on boucle sur ces elements
  for (var i=0; i<listeNiv1.length; i++) {
    // on recupere l'id du menu courant
    var idCourant=listeNiv1[i].id;
    // si l'id courant est le meme que le menu que l'on a clique alors on traite le sous menu
    // sinon on le cache et on passe au suivant
    if (idCourant==menu) {
        if (etatSousMenu=='block') {
          document.getElementById(sousMenu).style.display='none';
          } else {
             document.getElementById(sousMenu).style.display='block';
          }
        } else {
           // attention, si on cache, on doit cacher le sous menu du menu courant, il faut donc creer une nouvelle variable pour cacher celui-ci
           var sousMenuTemp='sous' + idCourant;
           document.getElementById(sousMenuTemp).style.display='none';
        }
    }
}
 

Et, enfin le code du menu :


<div id="menu">
<?php
  require("identification/connexion_sql.php");
  // on attaque le php ici
  // dans un premier temps on recupere les menus de niveau 1 donc ceux qui ont l'id_parent egal a 0
  $req1 = "SELECT id_menu, lib_menu FROM menus WHERE id_parent='0' ORDER BY ordre_menu" or die ("impossible d'effectuer la requête");
  $rep1 = mysql_query($req1);
  while($row1 = mysql_fetch_array($rep1)) {
     // on affiche le menu de niveau 1
     echo "<div class=\"menu_niv1\" id=\"menu".$row1['id_menu']."\" onclick=\"afficheMenu(this.id)\"><a href=\"#\">".$row1['lib_menu']."</a></div>\n";
    // ensuite on fait une seconde requete pour chercher les sous menus de ce niveau, s'il y en a on les affiche, sinon on ne fait rien
    $req2=("SELECT id_menu, lib_menu FROM menus WHERE id_parent='".$row1['id_menu'].
               "' ORDER BY ordre_menu");  // or die ("impossible d'effectuer la requête");
    $rep2=mysql_query($req2);
    $nb2=mysql_num_rows($rep2);
    if (isset($nb2) && $nb2>0) {
       echo "<div id=\"sousmenu".$row1['id_menu']."\" class=\"menu_niv2\">\n";
       while ($row2=mysql_fetch_array($rep2)) {
           echo "<a href=\"#\">".htmlentities($row2['lib_menu'])."</a>\n";
       }
       echo "</div>\n";
    }
}
?>
</div>
 

le premier problème est le décalage du menu par rapport à la zone blanche.
Normalement, le menu doit être à la même hauteur que la zone blanche, mais ce n'est pas le cas sad
Je ne comprends pas pourquoi il y a ce problème.

Autre problème, le menu ne fonctionne pas du tout sous IE.

Pensez-vous pouvoir m'aider ?

Merci beaucoup et bonne soirée

Hors ligne

#18 22-10-2010 20:42:44

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : menu en php/sql

pour un problème de css jete conseil => http://alsacreations.com

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#19 22-10-2010 23:07:03

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : menu en php/sql

Bonjour,

Maljuna a écrit :

Je maintiens cependant que, même dans les cas que tu évoques, il faut réfléchir à une organiser du code qui ne nécessite pas que les menus soient générés à chaque sollicitation.

Je poursuis donc le débat...
Je suis bien de ton avis et je suis le premier défenseur des solutions techniques les plus rapides et qui sollicitent le moins possible le serveur. Cependant dans un contexte de gestion d'accès d'utilisateur d'entreprise à un ensemble de fonctions (menus en l'occurence), on est bien obligé d'attribuer à chaque fonction, une table de gestion des droits par utilisateur et/ou groupe d'utilisateurs qu'il faut scanner dynamiquement pour chaque fonction du menu de manière à la rendre disponible ou non dynamiquement, et il me paraît donc difficile de trouver une alternative dans ce contexte.
Concernant ta proposition d'imbrication <ul><li></li></ul> pour la création de menus, et te sachant être un "anti-défenseur" de l'optimisation du référencement SEO d'un site, quel est l'apport majeur que peut avoir une telle structure hors de ce contexte?

@Quaresma :

Quaresma a écrit :

<td width="183" valign="top" style="width: 145px;"><?php include"menu/menu.php" ?></td>

<?php include("menu/menu.php"); ?>

serait mieux non?

EDIT: De plus une gestion complète de menu via JS est plus complexe à mettre en place. Pour gagner du temps je te conseille de passer par un framework style jquery ou celui que j'utilise sur mon site qui est un framework JS dédié à la création de menu. Ca sert à rien de vouloir réinventer la roue wink et j'ose espérer que la valeur ajoutée de ton site réside ailleurs que dans la réalisation de tes menus.

++

Dernière modification par Jc (22-10-2010 23:16:54)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#20 22-10-2010 23:13:08

quaresma
Membre
Inscription : 10-05-2009
Messages : 42

Re : menu en php/sql

Jc a écrit :

@Quaresma :

Quaresma a écrit :

<td width="183" valign="top" style="width: 145px;"><?php include"menu/menu.php" ?></td>

<?php include("menu/menu.php"); ?>

serait mieux non?

++

Oui, mais cela ne résout aucun problème...:(

Hors ligne

#21 22-10-2010 23:28:51

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : menu en php/sql

Re,

@Quaresma: Pour te donner une idée de ce que représente une gestion de menu en JS, il faut attribuer à la base une DIV par menu cliquable, dont la gestion des attributs ce fait par la modification des attributs d'une classe JS dédiée associée à la DIV correspondante. Cela permet d'avoir un code plus facilement gérable, facile à maintenir, lisible et conçis. Pour débugger ton code, je suis désolé, j'ai pas trop le temps de m'y coller.

++


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#22 22-10-2010 23:50:31

quaresma
Membre
Inscription : 10-05-2009
Messages : 42

Re : menu en php/sql

Tant pis, peut-être que quelqu'un d'autre aura la gentillesse de m'aider...:(

Hors ligne

#23 23-10-2010 18:55:08

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : menu en php/sql

Bonjour,

La lecture est difficile et ca me pique un peu les yeux, désolé...


 echo "<div class=\"menu_niv1\" id=\"menu".$row1['id_menu']."\" onclick=\"afficheMenu(this.id)\"><a href=\"#\">".$row1['lib_menu']."</a></div>\n";
// Quand tu utilises ' ' comme délimiteur, il ne peut y avoir de contenu dynamique ($row1['id_menu'] par ex), il te faut donc sortir tes variables par concaténation dans ce cas et l'éxécution est de plus rapide.
// Par contre quand tu utilises " " comme délimiteur, il n'y a aucun intérêt d'utiliser la concaténation car le contenu est interprété et tu peux utiliser une syntaxe du style
echo " id=\"$machaine\" ";
 

Edit: Normalement il faut faire afficheMenu(this) et récupérer l'id du menu cliqué par le code dans ta fonction afficheMenu pour avoir quelque chose de propre. Or tu as écris afficheMenu(this.id) qui te fait transmettre l'id pas l'objet, et qui peut te rendre incompatible ton code avec certains navigateurs.

Dernière modification par Jc (23-10-2010 22:58:43)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#24 23-10-2010 19:34:35

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : menu en php/sql

Re,

Petite précision

Dans l'effet recherché que tu nous montres au début, il te faut une div par menu et une div par ensemble de sous menu dans laquelle se trouve une div par sous menu. suffit de cacher la div conteneur selon le menu cliqué. Tu verras ca te simplifira ton code.

Note: Dans ce cas, tous les menus et sous menu sont chargés et présents dans la page, il n'y a pas de calcul dynamique de menu pour afficher et cacher les menus.

Dernière modification par Jc (23-10-2010 23:01:07)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums