IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Menu et array


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 69
    Par défaut Menu et array
    Bonjour

    Je suis un grand, grand débutant en php donc je vais expliquer ce que j'ai fait et ce que je veux faire.
    J'ai créé un array contenant les url autorisées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $menu = array ('accueil' => 'accueil.php',
    					'contact' => 'contact.php',
    					'sitemap' => 'sitemap.php',
    					'accessibilite' => 'accessibilite.php');
    pour pouvoir ensuite passer un lien avec $_GET grace à ce code, au milieu de mon site:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if ( 
    	(isset($page)) && (isset ($menu[$page]) ) && (file_exists(DIR_PAGES.$page.'.php') )) { 
    		include(DIR_PAGES.$menu[$page]); //Si $page définie, autorisée, et existante, inclure page
    } else if (
    	(isset($page)) && (!file_exists(DIR_PAGES.$page.'.php'))) { //Si $page définie mais n'existe pas, inclure 404
    		include(PAGES_404);
    } else {
    		include (DIR_PAGES.'accueil.php'); //Si $page pas défini, inclure accueil
    		};
    Ce code me permet donc d'inclure le contenu du site grace à des liens de type index.php?page=nomdelapage.

    Ca me va très bien comme ça. Cependant j'aimerai maintenant générer dynamiquement le contenu des menus, avec une instruction de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach($menu as $name => $link) {
    echo "<a href='$link'>$name</a><br>";
    Cependant les clefs de mon array ne sont pas les noms que je veux donner au item du menu (qui serait plutot "Accessibilité" que "accessibilite").
    Idiotement je dirai qu'il me faut une troisième entré à mon array, qui soit la déscription du liens, mais à partir de là je bloque un peu.
    Faut il utiliser un tableau imbriqués, dans le genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $array = array( 'fruits' => array( 'pommes', 'tomates', 'abricots' ),
                    'animaux' => array( 'chats', 'chiens' ),
    ? Mais dans ce cas comme séléctionner les bonnes valeurs?

    Toute piste sera la bienvenue, j'imagine qu'il y a de meilleurs méthodes, mais si c'est possible de cette manière, j'aimerai bien le faire ainsi, pour progresser.

    D'avance merci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Par défaut
    Salut,

    Tout d'abord ton idée d'utiliser des tableaux de tableaux est la bonne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //Déclaration du menu
    $menu = array (
      'accueil' => array('accueil.php', 'Accueil'),
      'contact' => array('contact.php','Contact'),
      'sitemap' => array('sitemap.php', 'Plan du site'),
      'accessibilite' => array('accessibilite.php', 'Accessibilité')
    );
     
    //Construction du menu
    foreach($menu as $item) {
      echo '<a href="'.$item[0].'">'.$item[1].'</a><br />';
    }
    Du coup celà modifie ton sélecteur de page, en voici une version qui devrait fonctionner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    //Sélection de la page
     
    //Je vérifie que le paramètre page existe bien dans mon tableau
    //sinon $_CLEAN['page']=false
    $_CLEAN['page'] = array_key_exists($_GET['page'], $menu) ? $_GET['page'] : false;
     
    if( $_CLEAN['page'] ){
       //A ce stade, je suis certain que $_GET['page'] est valide
       //ce qui m'évite de tester l'existence du fichier (économise accès au disque dur)
       require(DIR_PAGES.$menu[$_CLEAN['page']][0]);
    } else {
       //page iconnue donc redirection vers accueil
       require(DIR_PAGES.'accueil.php');
    }
    Quelques infos:
    - La documentation de array_key_exists()

    - Différence entre require et include
    require fonctionne de la même façon qu'include, à la différence que require stop le script en cas de problème.
    Ce qui fait que dans le code si jamais DIR_PAGES.$menu[$page][0] n'existe pas, l'utilisation de require à la place de include provoquera un erreur fatale et stoppera donc le script (Doc de require).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 69
    Par défaut
    Merci! J'essaie de décortiquer tout ça, mais je n'arrive pas à trouver de documentation relative à $_CLEAR... Qu'est-ce que c'est? Ca ressemble à une super globale...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 69
    Par défaut
    Bon ça marche très bien.
    EDIT: ça ne marche pas très bien : ton code donne des liens de type "nomdufichier.php" alors que j'ai besoin de liens de type "index.php?page="
    J'essaie de le modifier.

    EDIT: Cette solution me semble compliqué. Je regarde si les tableau multidimensionnel ne serai pas plus simple pour cette utilisation

    Maintenant, pour aller plus loin, et surtout pour bien comprendre ce qu'il s'est passé ici, voilà ce que j'aimerai comprendre.

    On a donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_CLEAN['page'] = array_key_exists($_GET['page'], $menu) ? $page : false;
    Si $_GET['page'] existe dans $menu, $_CLEAN['page']=$_GET['page'], Sinon retourne false. On selectionne ici le bon élément du tableau sans utiliser d'index , puisqu'on a besoin d'une correspondance parfaite.

    Puisque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $menu = array ('accueil' => array ('accueil.php', 'Accueil'),
    'contact' => array ('contact.php', 'Contact'),
    'sitemap' => array ('sitemap.php', 'Plan du site'),
    'accessibilite' => array ('accessibilite.php', 'Accessibilité') ,
    Suis-je en droit de penser que ' item[0]=url?page; item[1]=fichiers.php item[2]=Titre '?
    Apparement non, puisque le code est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach ($menu as $item) {
    	echo '<li><a href="'.$item[0].'">'.$item[1].'</a>';
    Il semblerai donc que ' item[0]=fichiers.php item[1]=Titre '? Mais alors quel est l'index de la première valeur?


    Car dans le cas présent, meme si j'imagine que ce genre de chose devient plus simple avec une bdd (on peut donner autant de valeur à une variable qu'on veut, sans imbriquer de tableau non?), si je veux rajouter deux variable par item, pour obtenir pour chaque page/élément du tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ?page / fichier.php / Titre / menuBig / Footer
    Ou mainNav et Footer serai soit 1, soit 0 pour chaque élément du tableau. Le but ici serai le suivant : j'ai trois fois mon menu dans la page. Soit les deux variable (menuBig&Footer) sont nul, dans ce cas il s'agit du menu principale, on affiche tout les liens. Soit menuBig est TRUE, il s'agit d'un menu plus gros mais qui ne comprend que les pages les plus importantes, soit Footer est TRUE, il s'agit du pied de page qui comprent quelques pages différentes.

    Je ne dis pas que c'est très utile, voir léger, mais si j'arrive à faire ça je pense que je comprendrai mieux le fonctionnement des array.

    Merci d'avance et désolé si c'est pas très clair.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 69
    Par défaut
    C'est encore moi, le posteur fou qui parle tout seul

    Voilà ou j'en suis! J'ai un array de ce type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $menu = array(
    			array ('accueil','Accueil du site'),
    			array ('sitemap','Plan du site', ));
    Je crée mes menus de cette manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach ($menu as $menu_list)
    	echo '<li><a href="index.php?page='.$menu_list[0].'">'.$menu_list[1].'</a></li>';
    Qui me donne donc des liens de type 'index.php?page=nomdelapage'.
    Mais la je dois avouer que je suis assez perdu quant àl l'inclusion dynamique.

  6. #6
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Par défaut
    Salut,

    Petite erreur de mon côté concernant le lien dans la construction du menu, désolé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    foreach ($menu as $key=>$item) {
       echo '<li><a href="index.php?page='.$key.'">'.$item[1].'</a>';
    Pour ce qui est de la variable $_CLEAN, ce n'est pas une variable superglobal.
    J'ai l'habitude d'utiliser ce genre de variables pour les paramètres qui ont été vérifié.
    Ainsi quand je croise une variable $_CLEAN[xxx] dans mon code, je sais immédiatement qu'elle a été contrôlée au préalable et que je peux donc lui faire entièrement confiance.
    (Pratique issue du très bon bouquin Sécurité PHP5 & Mysql, chapitre 3 "Formulaires et téléchargement: valider les données". Editions Eyrolles ISBN 978-2-212-12114-8)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créé un menu html à partir d'une list ou array
    Par Clebit dans le forum ASP.NET
    Réponses: 3
    Dernier message: 17/04/2010, 22h55
  2. [PHP 4] array imbriqué : afficher les numéros de ligne d'un menu arborescent
    Par PHPdudimanche dans le forum Langage
    Réponses: 1
    Dernier message: 12/01/2009, 14h28
  3. Réponses: 7
    Dernier message: 19/09/2008, 11h27
  4. Réponses: 6
    Dernier message: 18/10/2007, 23h44
  5. Menu en GL
    Par Kaïn dans le forum OpenGL
    Réponses: 2
    Dernier message: 06/05/2002, 11h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo