menu dynamique php

Eléphanteau du PHP | 26 Messages

05 oct. 2007, 22:41

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

Eléphant du PHP | 443 Messages

05 oct. 2007, 22:59

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...

Eléphanteau du PHP | 26 Messages

05 oct. 2007, 23:07

si je comprend bien cela reste du bidouillage

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

merci

Eléphant du PHP | 443 Messages

06 oct. 2007, 00:32

Ton projet est développé en PHP 4 ou 5 ?

ViPHP
ViPHP | 4039 Messages

06 oct. 2007, 12:53

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 />'; 
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphanteau du PHP | 26 Messages

06 oct. 2007, 16:02

oui le > est normal, cela permet d avoir se signe devant chaque sous menu.

Invité
Invité n'ayant pas de compte PHPfrance

07 oct. 2007, 11:29

merci

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

07 oct. 2007, 11:54

Que veut dire ce "merci" ? Résolu ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 26 Messages

07 oct. 2007, 11:57

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]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

07 oct. 2007, 12:10

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"]

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 26 Messages

07 oct. 2007, 17:23

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.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

07 oct. 2007, 22:53

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.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute