Page 1 sur 1

menu dynamique php

Posté : 05 oct. 2007, 22:41
par gtony
bonjour
j ai un code qui permet d avoir un menu dynamique en php
celui ci fonctionne correctemnt
mais je ne sais pas ou mettre les lien pour que lorsque je clic sur un sous menu celui ci affiche la page correspondante

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php 

// Configuration 
// Nombre total de menus 
$nbr = 4; 

// Ci-dessous lister vos menus en mettant le titre en premiere place dans le array, les autres seront les sous-menus... 
$menu[1] = array ('Accueil', 

); 

$menu[2] =array('Virus et Spywares', 
'Virus MSN', 
'Norton et McAfee',

); 

$menu[3] = array ('Windows Vista', 
'Activation de Vista', 
'Raccourcis clavier', 
'Point de restauration',
'Effet Aéro',
'Compatibilite',
); 

$menu[4] = array ('Astuces', 
'Limiter la connexion d un compte utilisateur', 
);

// On définis le style des menus 
$menu_tpl = '<div style="padding: 2px"><a href="{lien}">{element}</a></div>'; 

// On boucle pour afficher tout les menus 
for ($i=1; $i<=$nbr; $i++) { 
     
    // On selectionne le nom du Menu 
    $element = $menu[ $i ][0]; 
     
    // On prevoit de refermer le menu en cliquant sur le lien (si menu ouvert) 
    
	if ($_GET['to'] == $i) $lien = ""; 
    else $lien = '?to='.$i; 
     
    // On applique le style 
    $in = array ('{element}', '{lien}'); 
    $out = array ($element, $lien); 
     
    $menus = str_replace ($in, $out, $menu_tpl); 
     
    // On affiche le Menu stylé 
    echo '<p>'.$menus.'</p>'; 
     
    // Si les sous-menus sont demandés, on les affiche en fonction... 
    if (isset($_GET['to']) && $_GET['to'] != '') { 
         
        // On vérifie le N° de Menu demandé pour limiter à 1 affichage les sous menus... 
        if ($i == $_GET['to']) { 
             
            // On boucle les sous-menus en fonctions des elements de l'array correspondant. 
            for ($j=1; $j<=count($menu[ $i ])-1; $j++) { 
                 
                // On affiche le lien des sous-menus 
                echo  '><a href="?to='.$i.'goto='.$j.' ">'.$menu[ $i ][ $j ].'</a><br />'; 
             
            } 
         
        } 
     
    } 

} 

?> 

</body>
</html>

merci

Posté : 05 oct. 2007, 22:59
par Tracker
En fait, dans ton script y'a pas réellement de notion de page (destination). Tu "reget" toujours sur la même url, et en réalité c'est la combinaison des variables $_GET['to'] et $_GET['goto'], qui te permettent de savoir quel item de menu est selectionné et donc de choisir également ce que tu veux afficher.

Tu peux bricoler un include, pour séparer le contenu correspondant au sous-menu, à la fin de ton script:
include ('page_'.$_GET['to'].'_'.$_GET['goto'].'.inc');
et tu crées autant de pages_[xx]_[yy].inc que tu as de sous-menus...

Posté : 05 oct. 2007, 23:07
par gtony
si je comprend bien cela reste du bidouillage

Tracker, connais tu un autre code php qui permet de le faire sans bidouille ?

merci

Posté : 06 oct. 2007, 00:32
par Tracker
Ton projet est développé en PHP 4 ou 5 ?

Posté : 06 oct. 2007, 12:53
par Berzemus
Il me semble voir un souci avec cette ligne:
 echo  '><a href="?to='.$i.'goto='.$j.' ">'.$menu[ $i ][ $j ].'</a><br />'; 
D'abord, le ">" en début de chaine, c'est normal ?
Et puis y'a un souci avec ta requête, il manque le "&" entre les variables:
 echo  '><a href="?to='.$i.'&goto='.$j.' ">'.$menu[ $i ][ $j ].'</a><br />'; 

Posté : 06 oct. 2007, 16:02
par gtony
oui le > est normal, cela permet d avoir se signe devant chaque sous menu.

Posté : 07 oct. 2007, 11:29
par Invité
merci

Posté : 07 oct. 2007, 11:54
par Truc
Que veut dire ce "merci" ? Résolu ?

Posté : 07 oct. 2007, 11:57
par gtony
Voici le code ou j en suis
cela fonctionne mais les titres ne sont pas dirige vers leurs page seul les sous menu fonctionne

une idee ?
<title>Document sans titre</title> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
</head> 
 
<body> 
<?php  
 
// Configuration  
// Nombre total de menus  
$nbr = 2;  
 
// Ci-dessous lister vos menus en mettant le titre en premiere place dans le array, les autres seront les sous-menus...  
$menu[1] [titre]= array ('Accueil',  
 
);  
$menu[1][lien]=array ('index.php');
 
$menu[2][titre] =array('Virus et Spywares',  
'Virus MSN',  
'Norton et McAfee', 

);  
 $menu[2][lien]=array ('securite.php','virusmsn.php','nortonmcafee.php'); 
 
$// On définis le style des menus  
$menu_tpl = '<div style="padding: 2px"><a href="{lien}">{element}</a></div>';  
 
// On boucle pour afficher tout les menus  
for ($i=1; $i<=$nbr; $i++) {  
      
    // On selectionne le nom du Menu  
    $element = $menu[ $i ][titre][0];  
      
   if ($_GET['to'] == $i) $lien = "index.php";  
    else $lien = '?to='.$i;     
      
    // On applique le style  
    $in = array ('{element}', '{lien}');  
    $out = array ($element, $lien);  
      
    $menus = str_replace ($in, $out, $menu_tpl);  
      
    // On affiche le Menu stylé  
    echo '<p>'.$menus.'</p>';  
      
    // Si les sous-menus sont demandés, on les affiche en fonction...  
    if (isset($_GET['to']) && $_GET['to'] != '') {  
          
        // On vérifie le N° de Menu demandé pour limiter à 1 affichage les sous menus...  
        if ($i == $_GET['to']) {  
              
            // On boucle les sous-menus en fonctions des elements de l'array correspondant.  
            for ($j=1; $j<=count($menu[ $i ][titre])-1; $j++) {  
                  
                // On affiche le lien des sous-menus  
                echo  '><a href="'.$menu[ $i ][lien][ $j ].'?to='.$i.'goto='.$j.' ">'.$menu[ $i ][titre][ $j ].'</a><br />';  
              
            }  
          
        }  
      
    }  
 
}  
 
?>  
[/code]

Posté : 07 oct. 2007, 12:10
par Truc
tu démarres la boucle des titres à 1 alors que tu devrais le faire depuis 0 :
for ($j=0; $j<count($menu[ $i ]["titre"]); $j++)


car
$menu[2]["titre"] =array('Virus et Spywares',  
'Virus MSN',  
'Norton et McAfee'); // où il y a une virgule de trop d'ailleurs... et juste après un $ de trop aussi
correspond à :
$menu[2]["titre"] =array(
0 => 'Virus et Spywares',  
1 => 'Virus MSN',  
2 => 'Norton et McAfee'
);
n'oublie pas les guillemets pour les indices :
$menu[2]["titre"]

Posté : 07 oct. 2007, 17:23
par gtony
oui j y avais pense
mais cela creer le titre deux fois
une fois dans le titre et une fois dans le sous menu

ex :

Accueil
>Accueil

pas terrible au niveau estitique.

Posté : 07 oct. 2007, 22:53
par Truc
En effet (pas toujours facile de céchiffrer un code avec peu d'explications)...
ceci dit les remarques concernant les guillemets, les virgules en fin de tableau et le $ restent vraies.

Le lien des titres est construit à partir de :
if ($_GET['to'] == $i) $lien = "index.php";  
    else $lien = '?to='.$i;


après ça dépend de ce que tu veux obtenir... comprend ce que veulent dire ces 2 lignes.
Rien de mieux qu'un script fait soi-même pour comprendre.