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 fonction PHP


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
    Avril 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 92
    Par défaut Menu et fonction PHP
    Bonjour à tous.
    Voilà mon problème qui n’en est pas vraiment un car tous fonctionne correctement.
    Il se trouve que mon menu est un ensemble d’include appelé par une fonction.

    Le menu est donc appelé au chargement de la page par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
        require_once("./incl.menu.php");
     
        $menu = affiche_menu();
    ?>
    disponible sur chacune de mes pages.

    incl.menu.php contient le code suivant qui permet de gérer l’onglet actif de cette partie du menu.
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?php
        function affiche_menu()
        {
            // tableaux contenant les liens d'accès et le texte à afficher
            $tab_menu_lien = array( "home.php", "services.php", "account.php", "news.php", "#", "#" );
            $tab_menu_texte = array( "Home", "Services", "Account", "News", "Contact", "How to" );
     
            // informations sur la page
            $info = pathinfo($_SERVER['PHP_SELF']);
     
            $menu = "\n<div id=\"menu\">\n    <ul class=\"onglets\">\n";
     
     
     
            // boucle qui parcours les deux tableaux
            foreach($tab_menu_lien as $cle=>$lien)
            {
                $menu .= "    <li";
     
                // si le nom du fichier correspond à celui pointé par l'indice, alors on l'active
                if( $info['basename'] == $lien )
                    $menu .= " class=\"active\"";
     
                $menu .= "><a href=\"" . $lien . "\">" . $tab_menu_texte[$cle] . "</a></li>\n";
            }
     
            $menu .= "</ul>\n</div>";
     
            // on renvoie le code xHTML
            return $menu;        
        }
    ?>

    L’autre partie du menu est celle qui m’embête car j’ai tendance à penser que, bien que fonctionnant correctement, c’est un joyeux bordel et que cela pourrait être simplifié.

    Dans mon header j’ai l’appel suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include("incl.topmenu.php"); ?>
    incl.topmenu.php contient le code suivant qui permet de gérer la deuxieme partie du menu qui depend du statut du visiteur ; si connecté à son compte ou non.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    			if (isset($_SESSION['id']) && !empty($_SESSION["id"])) {  
    				include ('incl.user_connected.php');
    			}
    				else { 
    					include ('incl.userbar.php');
    				}
    		?>

    Ici le code de incl.userbar.php actif si le user n’est pas connecté :

    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
    16
    17
    18
    19
    20
    21
    22
    <div id="topmenu">
    			<ul class="userbar">
    				<li>
    					<?php        
    						echo $menu;
    					?>
    				</li>
    			</ul>
    			<ul class="userbarlog">
    				<li>
    					<a class="panelLink panelOpener" id="slide_panellogin_opener" href="#login_popup">Login</a>
    					<!-- <a class="panelLink" href="#login_popup" style="background:url('png/encoche_nav.png') no-repeat right center; padding-right:25px;">Login</a> -->
    				</li>						
    				<li>
    					<a href="register.php">Register</a>
    				</li>
    				<li>
    					<a class="panelSearch panelOpener" id="slide_panelsearch_opener" href="#mainsearch">Search</a>
    					<!-- <a class="panelSearch" href="#mainsearch" style="background:url('png/encoche_nav.png') no-repeat left center; padding-right:25px;">Search</a> -->
    				</li>				
    			</ul>
    		</div>

    Ici le code de incl.user_connected.php actif si le user est connecté :


    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
    16
    17
    18
    19
    20
    21
    22
    		<div id="topmenu">
    			<ul class="userbar">
    				<li>
    					<?php        
    						echo $menu;
    					?>
    				</li>
    			</ul>
    			<ul class="userbarlog">
    				<li>		
    					<a href="deconnexion.php">Logout</a>
    				</li>
    				<li>
    					<a class="panelAccount panelOpener" id="slide_panelaccount_opener" href="#account_popup" style="background:url('png/encoche_nav.png') no-repeat right center; padding-right:25px; ">Welcome <?php echo stripslashes(htmlentities(trim($_SESSION['username']))); ?></a>
    					<!-- <a class="panelAccount" href="#account_popup" style="background:url('png/encoche_nav.png') no-repeat right center; padding-right:25px; ">Welcome <?php echo stripslashes(htmlentities(trim($_SESSION['username']))); ?></a> -->
    				</li>
    				<li>
    					<a class="panelSearch panelOpener" id="slide_panelsearch_opener" href="#mainsearch" style="background:url('png/encoche_nav.png') no-repeat left center; padding-right:25px;">Search</a>
    					<!-- <a class="panelSearch" href="#mainsearch" style="background:url('png/encoche_nav.png') no-repeat left center; padding:0 25px 0 20px; ">Search</a> -->
    				</li>	
    			</ul>
    		</div>
    Ma question est toute simple . Est-il possible de simplifier ce code ou de le rendre plus propre ?
    Merci à ceux qui prendront le temps de me répondre.

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Par défaut
    Pour rendre plus propre ton code, tu peut déjà essayer d'éviter de mettre du code html dans du php, car cela fait tourner le moteur apache pour rien.


    Voici un exemple :

    Ton menu
    Je ne sais pas si le ternaire fonctionne ici, je n'ai pas vérifié.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <div id="menu">
    	<ul class="onglets">
            <? foreach($tab_menu_lien as $cle=>$lien){?>
                    <li <?=($info['basename'] == $lien) ? "class=\"active\"" : ""?> >
    		        <a href="<?=$lien?>"><?=$tab_menu_texte[$cle]?></a>
    	        </li>
            <?}?>
            </ul>
    </div>
    et LA page pour ton top menu
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?$var = (isset($_SESSION['id']) && !empty($_SESSION["id"])) true : false;?> 
    <div id="topmenu">
    	<ul class="userbar">
    		<li>
    			<?=$menu?>
    		</li>
    	</ul>
    	<ul class="userbarlog">
    		<?if($var){?>
    		<li>
    			<a href="deconnexion.php">Logout</a>
    		</li>
    		<li>
    			<a class="panelAccount panelOpener" id="slide_panelaccount_opener" href="#account_popup" style="background:url('png/encoche_nav.png') no-repeat right center; padding-right:25px; ">Welcome <?php echo stripslashes(htmlentities(trim($_SESSION['username']))); ?></a>
    			<!-- <a class="panelAccount" href="#account_popup" style="background:url('png/encoche_nav.png') no-repeat right center; padding-right:25px; ">Welcome <?php echo stripslashes(htmlentities(trim($_SESSION['username']))); ?></a> -->
    		</li>
    		<?}else{?>
    		<li>
    			<a class="panelLink panelOpener" id="slide_panellogin_opener" href="#login_popup">Login</a>
    			<!-- <a class="panelLink" href="#login_popup" style="background:url('png/encoche_nav.png') no-repeat right center; padding-right:25px;">Login</a> -->
    		</li>						
    		<li>
    			<a href="register.php">Register</a>
    		</li>
    		<?}?>
    		<li>
    			<a class="panelSearch panelOpener" id="slide_panelsearch_opener" href="#mainsearch" style="background:url('png/encoche_nav.png') no-repeat left center; padding-right:25px;">Search</a>
    			<!-- <a class="panelSearch" href="#mainsearch" style="background:url('png/encoche_nav.png') no-repeat left center; padding:0 25px 0 20px; ">Search</a> -->
    		</li>	
    	</ul>
    </div>

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

Discussions similaires

  1. Appel fonction php dans code javascript
    Par licorne dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/03/2008, 10h55
  2. [PHP-JS] menu déroulant et fonction php.
    Par Empty_body dans le forum Langage
    Réponses: 2
    Dernier message: 20/08/2007, 18h07
  3. Réponses: 7
    Dernier message: 29/05/2007, 15h11
  4. menu déroulant en php
    Par Husqvarna dans le forum Langage
    Réponses: 2
    Dernier message: 10/10/2005, 13h26
  5. La fonction PHP sleep() pompe t-elle en ressource UC ?
    Par Thierry8 dans le forum Langage
    Réponses: 3
    Dernier message: 20/08/2005, 19h37

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