Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/02/2012, 17h47   #1
Futur Membre du Club
 
Inscription : avril 2005
Messages : 90
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 90
Points : 16
Points : 16
Envoyer un message via MSN à xboulney
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 :
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 :
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 :
<?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 :
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 :
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 :
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.
xboulney est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 14h22   #2
Futur Membre du Club
 
Homme
Étudiant
Inscription : mai 2011
Messages : 22
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 : 22
Points : 19
Points : 19
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 :
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 :
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>
zeroc00l est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h23.


 
 
 
 
Partenaires

Hébergement Web