8791 sujets

Développement web côté serveur, CMS

Bonjour à toutes et tous Smiley cligne

Comme je suis en train de développer mon blog, je suis à la recherche des meilleurs pratiques pour le réaliser.

J'envisage d'utiliser les includes pour le header, le menu, le footer, etc...

Mais j'ai une petite difficulté au niveau du menu.

Je veux bien l'inclure, mais comme il sera partout pareil ( sur toutes les pages ), comment dois-je procéder pour gérer la page actuelle ( en soulignant le lien par exemple ), comme je le fais actuellement avec une class = actuel.

	<nav class="menu_principal" role="navigation">

		  <ul>
			<li><a href="index.php">Accueil</a></li>
			<li><a href="blog.php" class="actuel">Blog</a></li>
			<li><a href="contact.php">Contact</a></li>
		  </ul>
		  
		</nav>


J'avais lu quelque chose ici sur alsacréations, mais je n'arrive pas à le retrouver..

Je vous remercie vivement d'avance !

Marc
Modifié par marc.suisse (21 Jul 2012 - 12:13)
En PHP, un truc dans le genre :


<ul id="navmenu">
    <li><a <?php if (strpos($_SERVER['PHP_SELF'], 'home.php')) echo 'class="currentPage"';?> href="index.php">accueil</a></li>
    <li><a <?php if (strpos($_SERVER['PHP_SELF'], 'contact.php')) echo 'class="currentPage"';?> href="contact.php">contact</a></li>
</ul>


Suffit ensuite d'aller styler la class "currentPage" dans le CSS
Modifié par jmlapam (21 Jul 2012 - 13:23)
Salut, merci pour ton aide Smiley cligne

Si je comprends bien, cette fonction PHP va récupérer l'url du site ou en tout cas la fin du répertoire.

Je vais faire des essais, merci en tout cas Smiley lol
Bonjour,

Voici le code que j'utilise pour activer chaque page de mon site tout en utilisant le include pour le menu:

le code de la page menu:


<ul id="nav">
    <li><a <?php if(PAGE == 'accueil'){ echo ' class="nav_active"'; } ?> href="index.php">Accueil</a></li>
    <li><a <?php if(PAGE == 'contact'){ echo ' class="nav_active"'; } ?> href="apropos.php">Contact</a></li>
</ul>



Comme dans l'exemple, nous avons pris un menu avec deux pages (accueil et contact), le code php à mettre tout en haut de chaque page de ton site (avant meme le doctype) est le suivant:

dans la page accueil.php:

<?php
define('PAGE', 'accueil');
?>


dans la page contact.php

<?php
define('PAGE', 'contact');
?>


Bien évidemment, vous aurez défini dans le css les styles du menu actif (class="nav_active")

bonne chance
Correction


le code PHP de la page menu:


<ul id="nav">
    <li><a <?php if(PAGE == 'accueil'){ echo ' class="nav_active"'; } ?> href="accueil.php">Accueil</a></li>
    <li><a <?php if(PAGE == 'contact'){ echo ' class="nav_active"'; } ?> href="contact.php">Contact</a></li>
</ul>
@marc

Smiley cligne

@colibri

C'est peu redondant ton code. Le principe des include et du PHP c'est d'économiser du temps.
Voici comment optimiser :

$page = array('page1.php', 'page2.php', 'page3.php', 'page4.php');



EDIT: Que l'on m'explique l'intérêt d'utiliser include si c'est pour modifier chaque page une à une.
Modifié par jmlapam (23 Jul 2012 - 17:26)
Slt

Une boucle

j'ai fais ça vite fait mais vois ou je veux en venir, et adapte le à ton cas !

<?php 

		 // tableaux contenant les liens d'accès et le texte à afficher

        $tab_menu_lien = array( "home.php", "about.php","contact.php");

        $tab_menu_texte = array( "presentation", "a propos", "contact");

        

        // constr du menu		

        $menu = "";
        // boucle qui parcours les deux tableaux
        foreach($tab_menu_lien as $cle=>$lien)
        {
 			$menu .= "<a ";
            // si le nom du fichier correspond à celui pointé par l'indice, alors on l'active

            if( $rep == str_replace(".php","",$lien) ){

                $menu .= ' class="active"';

            }

            $menu .='href="' . $lien . '">' . $tab_menu_texte[$cle] . '</a>';

        }      

        echo $menu; ?>
Bonjour à vous, merci pour votre aide Smiley cligne

jmlapam =>

Ta solution semble la plus simple à mettre en place, mais quels sont les avantages et inconvénients par rapport à la boucle ?
La solution de colibri est la plus sûre. Celle de phpcbien mélange trop PHP et HTML au niveau de la vue ce qui est assez crade au niveau de la séparation des différentes couches.
Modifié par jb_gfx (22 Jul 2012 - 21:50)
marc.suisse a écrit :


jmlapam =&gt;

Ta solution semble la plus simple à mettre en place, mais quels sont les avantages et inconvénients par rapport à la boucle ?



C'est fait pour être le plus simple possible. Je n'ai absolument pas pris en compte les autres critères.
Perso, je n'utilise pas cette solution.

@jb: moi je ne capte pas l'intérêt d'aller mettre un define sur chaque page. C'est quoi le gain?
Modifié par jmlapam (22 Jul 2012 - 23:31)
a écrit :
Celle de phpcbien mélange trop PHP et HTML au niveau de la vue ce qui est assez crade au niveau de la séparation des différentes couches.


Imagine que t'as 50 liens dans ton menu, passe ta journée à faire des if si ca t'chantes
a écrit :

assez crade au niveau de la séparation des différentes couches


bah suffit de transmettre les 2 arrays en assignant les valeurs dans ton ctrl et à l'aide de smarty les balayer

c'était un exemple , j'allais pas lui montrer les parties vues et ctrl