modifier ce script de menu avec onglet actif

modifier ce script de menu avec onglet actif - PHP - Programmation

Marsh Posté le 13-12-2009 à 09:57:16    

Bonjour à tous,

 

ce script pourrait etre bien mais le souci c'est qu'il faut que tous les fichiers soit ds le meme dossier. Dés qu'il y a des sous dossier, les pages  se trouvant ds les sous dossier ne peuvent pas utiliser le script.

 

pour voir aller ici:
lhttp://www.desmotscrasseux.lautre.net/
puis sur environnement.
là çà va bien parce que la page index.php (Accueil) et environnement.php sont ds le meme dossier.
mais pas les articles qui sont ds un sous dossier donc si on choisi ds environnement "tous les articles" vous constaterez que l'onglet n'est pas actif et que le menu ne fonctionne pas ainsi que pour l'articles  agent orange qui se trouve ds "tous les articles".
comment l'optimiser ?

 


voici de le code

Code :
  1. <?php
  2.     function affiche_menu()
  3.     {
  4.         // tableaux contenant les liens d'accès et le texte à afficher
  5. $tab_menu_lien = array( "index.php", "alternaltives.php", "environnement.php", "contact.php" );
  6. $tab_menu_texte = array( "Accueil", "Alternaltives", "Environnement", "Sciences et technologies", "Media", "Vie politique", "Contact" );
  7. // informations sur la page
  8. $info = pathinfo($_SERVER['PHP_SELF']);
  9. $menu = "\n<div id=\"menu\">\n    <ul id=\"onglets\">\n";
  10.        
  11. // boucle qui parcours les deux tableaux
  12. foreach($tab_menu_lien as $cle=>$lien)
  13. {
  14.     $menu .= "    <li";
  15.     // si le nom du fichier correspond à celui pointé par l'indice, alors on l'active
  16.     if( $info['basename'] == $lien )
  17.         $menu .= " class=\"active\"";
  18.     $menu .= "><a href=\"" . $lien . "\">" . $tab_menu_texte[$cle] . "</a></li>\n";
  19. }
  20. $menu .= "</ul>\n</div>";
  21.         // on renvoie le code xHTML
  22. return $menu;
  23.     }
  24. ?>
 


j'ai pu p-ê trouver une piste ici mais je suis pas sur et je comprend pas :

 
Citation :

Ton tuto est bien, mais pour la reconnaissance de l'element actif ton approche est un peut simpliste. Généralement on utilise les tabs pour les "Sections" on imagine qu'il y aura des sous dossiers qui font partie de la même tab et dans ce cas ta tab sera plus sélectionnée.
Je te propose cette solution (peut être on peut faire plus simple)

 
Code :
  1. <?php
  2. /*
  3. * $uri  URL de la page
  4. * $link Lien à tester
  5. */
  6. function isPartOf($uri, $link, $checkFile = false){
  7. //on éclate l'url et le lien par le slash
  8.         $up = explode('/', $uri);
  9.         $lp = explode('/', $link);
  10. //on suprimme le nom de fichier pas obligatoire
  11. if(!$checkFile){
  12.         array_pop($lp);
  13.         array_pop($up);
  14. }
  15. //on suprimme le premier element vide
  16.         array_shift($lp);
  17.         array_shift($up);
  18. //le if sert à quelque chose mais je me souviens plus ca je met pas de commentaires dans mon code parce que je suis un rebelZz
  19.         if(count($lp) < count($up)){
  20. //on calcule l'intersection entre les deux ensembles et on vérifie si l'url est dans le même dossier que notre lien
  21.             return count(array_intersect($lp, $up)) >= count($lp) && count($lp) != 0;
  22.         }else{
  23.             return count(array_intersect($lp, $up)) >= count($lp);
  24.         }
  25.     }
  26. ?>
 


 


De plus le tuto indique de faire une "include" de ce style :

 


Code :
  1. <?php
  2.     require_once("./menu.php" );
  3.     $menu = affiche_menu();
  4. ?>
  5. <html>
  6. <head>
  7.     <link href="design.css" type="text/css" rel="stylesheet" />
  8. </head>
  9. <body>
  10. <?php
  11.     echo $menu;
  12. ?>
  13. </body>
  14. </html>
 

ne peut on pas mettre ce bout de php  require_once ds le HEAD plutot qu'avant la balise HTML ?
merci de m'aider a+


Message édité par Positiviste le 13-12-2009 à 10:17:08

---------------
ploum ploum tralala
Reply

Marsh Posté le 13-12-2009 à 09:57:16   

Reply

Marsh Posté le 13-12-2009 à 10:50:14    

pourrait on faire quelque chose qui dit plutot que de donné une seule page active ("index.php", "envrionnement.php", "actualité.php" )
 
on lui indique un dossier, de ce fait toutes les pages qui sont contenu ds le dossier sont prises en compte  
 
("dossier environnement", "dossier_actualite" etc...)


---------------
ploum ploum tralala
Reply

Marsh Posté le 13-12-2009 à 12:22:46    

Pourquoi tu ne penses pas à créer une variable php dans chaque page qui pourrait indiquer le chemin jusqu'à l'index. Je pense que c'est moins couteux et que c'est plus rapide. Du genre :
$index='../../';
Je pense que ça pourrait aller et tu pourras le rajouter meme sur les images et les liens. Peace!

Reply

Marsh Posté le 16-12-2009 à 18:45:10    

Positiviste a écrit :

pourrait on faire quelque chose qui dit plutot que de donné une seule page active ("index.php", "envrionnement.php", "actualité.php" )
 
on lui indique un dossier, de ce fait toutes les pages qui sont contenu ds le dossier sont prises en compte  
 
("dossier environnement", "dossier_actualite" etc...)


Pour cela, il faut parcourir les dossiers et récupérer un tableau avec tous les fichiers.

Code :
  1. <?php
  2. // Array devant $directories dans la déclaration de la fonction permet de s'assurer que $directories est bien un Array.
  3. // Cela fonctionne avec n'importe quelle autre classe.
  4. function affiche_menu(Array $directories)
  5. {
  6.    $auth_files = array(); // $auth_files contient la liste des fichiers autorisés.
  7.    foreach($directories as $directory) {
  8.        $auth_files[] = scandir($directory);
  9.    }
  10.  
  11.    // Reste de la fonction
  12.    // Vérifie les fichiers avec is_file avant inclusion à cause des dossiers courant et parent.
  13.    // Tu peux aussi ajouter d'autres tests (seulement les fichiers avec certaines extensions par exemple).
  14. }
  15. ?>


Message édité par Profil supprimé le 16-12-2009 à 18:46:11
Reply

Marsh Posté le 17-12-2009 à 14:23:05    

merci c'est sympas


---------------
ploum ploum tralala
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed