menu dynamique - pb d'affichage

wik
Eléphanteau du PHP | 29 Messages

20 sept. 2008, 12:33

Bonjour,

j'ai créé un menu avec 2 grandes catégories : "projets" et "affiliés", pour lesquels une liste des artistes s'affiche pour chacune. Lorsque je clique sur un artiste spécifique (avec GET), je veux que son sous-menu spécifique apparaisse...
Le souci est lorsque je clique, le menu de l'artiste apparaît, mais pas au bon endroit... Il se met à la fin de chacune des 2 catégories.

Quelq'un peut-il m'aider ? Ca fait des jours que je me prends la tête dessus, sans succès... C'est certainement un truc idiot, mais je ne vois pas...
Merci !

Voici le code :
<table width="170" border="0" cellspacing="0" cellpadding="0" align="left" class="txt7noir">
  <?php
     // AFFICHAGE DES 2 CATEGORIES
$requete = mysql_query ("SELECT * FROM menu ORDER BY menu_order");

while ($resultat = mysql_fetch_array($requete)) {
 echo '<tr> 
    <td width="5">&nbsp;</td>
    <td width="160" colspan="2">&nbsp;</td>
    <td width="5">&nbsp;</td>
  </tr>
  <tr> 
    <td width="5">&nbsp;</td>
    <td width="160" colspan="2" class="txt8noirGras">--------------------------<br>
     '.strtoupper($resultat[menu_titre]).'</td>
    <td width="5">&nbsp;</td>
  </tr>
    <tr> 
    <td width="5">&nbsp;</td>
    <td width="160" colspan="2">&nbsp;</td>
    <td width="5">&nbsp;</td>
  </tr>' ; 

 	// AFFICHAGE DES ARTISTES / CATEGORIE
	$requete2 = mysql_query ("SELECT a.artiste_id, a.artiste_nom FROM artiste a LEFT JOIN menu m ON (a.menu_id = m.menu_id) WHERE a.menu_id = '".$resultat[menu_id]."' ORDER BY a.artiste_order") or die('Erreur : ' . mysql_error());
	
	while ($resultat2 = mysql_fetch_array($requete2)) {
 $artist=preg_replace('/\s/', '_', $resultat2[artiste_nom]);
 
 if ($resultat[menu_id] == '1') {
 $res = '<a href="projects.php?id='.$resultat2[artiste_id].'&artist='.$artist.'">'.$resultat2[artiste_nom].'</a>';
 } else {
 $res = '<a href="related_artist.php?id='.$resultat2[artiste_id].'&artist='.$artist.'">'.$resultat2[artiste_nom].'</a>';
	}
	
		echo '<tr>
    <td width="5">&nbsp;</td>
    <td width="160" colspan="2" class="txt8noir">'.$res.'</a></td>
    <td width="5">&nbsp;</td>
  </tr>';
 
 }

 // AFFICHAGE DU SOUS-MENU PAR ARTISTE
 $artiste_id = $_GET['id'];
 if (isset($_GET['id'])){
	$requete3 = mysql_query ("SELECT DISTINCT m2.menu2_titre FROM artiste_infos ai LEFT JOIN artiste a ON (a.artiste_id = ai.artiste_id) LEFT JOIN menu2 m2 ON (m2.menu2_id = ai.menu2_id) WHERE ai.artiste_id = '".$artiste_id."' ORDER BY m2.menu2_order") or die('Erreur : ' . mysql_error());
	
	while ($resultat3 = mysql_fetch_array($requete3)) {

echo '<tr> 
          <td width="5">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="140"><a href="#live">'.$resultat3[menu2_titre].'</a><br></td>
          <td width="5">&nbsp;</td>
        </tr>';
}
 }
 }

?>
</table>

Mammouth du PHP | 1353 Messages

22 sept. 2008, 09:43

Bonjour,

Cela me semble tout a fait logique vu que tu fais, dans l ordre :
Affichage des 2 catégories
Affichage des artistes par catégorie
Affichage du sous menu par artiste

Donc c'est l'ordre dans lequel ca apparait...
Il faut mélanger l'ordre d'apparation pour l'avoir au bon endroit.

Aussi, petite remarque :
$artiste_id = $_GET['id']; 
 if (isset($_GET['id'])){ 
Tu testes l'existence d'une variable après l'avoir assignée à une autre variable, il faudrait plutot faire
 if (isset($_GET['id'])){
$artiste_id = $_GET['id'];  
Et pour ton code, l'idée serait de faire :
//Affichage de la catégorie
while(....) {
//dans ce while d'affichage 
//SI la $_GET["id"] ET que cela correspond à la catégorie en cours
if(isset(......) && ...) {
//Affichage du sous menu
}
}
C'est cet agencement la qu'il faut mettre en place, et trouver la bonne condition pour savoir quand tu es dans la bonne catégorie par rapport à ton $_GET["id"];
Tell me and I forget. Teach me and I remember. Involve me and I learn.