Vous n'êtes pas identifié(e).
Pages :: 1
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 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 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 :
Un fichier nommé style.css qui contient les styles pour le menu :
La page sur laquelle j'appelle le menu dynamiquement ainsi que les fichiers "functions.js" et "style.css" :
Puis, le fichier du menu :
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
salut,
je ne comprend pas exactement ce qui te manque ?
dans ton exemple tu a le source html de base que tu doit respecter
<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
C'est ce que j'ai fait dans le code de mon menu non ??
Hors ligne
quelqu'un pour m'éclairer s'il vous plait ?
Hors ligne
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
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
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
J'ai fait des modifications, mais le résultat n'est pas encore terrible
Voici mon nouveau code :
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
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
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
@+
Il en faut peu pour être heureux pompompompompompompompompompompom
Hors ligne
j'ai fait une modification dans le code mais ce n'est pas encore cela :
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
hum vire les
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
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
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
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
Bonsoir,
j'ai fait pas mal de modifications.
Voici le code de la page "presentation.php" :
</body>
</html>
Voici le code du CSS :
Voici le code du js :
Et, enfin le code du menu :
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
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
pour un problème de css jete conseil => http://alsacreations.com
@+
Il en faut peu pour être heureux pompompompompompompompompompompom
Hors ligne
Bonjour,
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 :
<td width="183" valign="top" style="width: 145px;"><?php include"menu/menu.php" ?></td>
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 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
@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
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
Tant pis, peut-être que quelqu'un d'autre aura la gentillesse de m'aider...:(
Hors ligne
Bonjour,
La lecture est difficile et ca me pique un peu les yeux, désolé...
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
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
Pages :: 1