[php] [RESOLU] aide case switch automatisé php

aide case switch automatisé php [php] [RESOLU] - PHP - Programmation

Marsh Posté le 10-03-2009 à 10:43:25    

bonjour a tous
 
j'essaye se matin de faire un petit script qui pourrais m'etre bien utile mais je recontre quelques petit problemes et j'espere que certains d'entre vous pourrons m'aider.
 
En effet sur mes sites j'utilise les include avec switch et case pour l'affichage du contenue
 
par exemple
 

Code :
  1. switch($rub)
  2. {
  3. case'menu':
  4.  switch($page)
  5.  {
  6.  case'liens':
  7.  include('liens.php');
  8.  break;
  9.  case'referenceurs':
  10.  include('referenceurs.php');
  11.  break;
  12.  default:
  13.  include('news.php');
  14.  break;
  15.  }
  16.  break;
  17. default:
  18. include('news.php');
  19. break;
  20. }
  21. ?>


 
 
mais cela demande a chaque fois l'edition de se bout de code pour ajouter de nouvelles pages
 
donc en gros je veux optimiser pour gagner du temps. vue que chaque case et include ont le meme nom (l'extension en moins) j'ai fait se bout de code mais il ne fonctionne evidemment pas je pense que cest surtout l'ecriture du code qui pose probleme.
 

Code :
  1. <?
  2. switch($rub)
  3. {
  4. case'menu':
  5.  switch($page)
  6.  {
  7. $files = glob("*.php" );
  8. foreach ($files as $filename)
  9. {   
  10. $filename2 = substr($filename, 0, -4);     
  11. $ss = "
  12. case'$filename2':
  13. include('$filename');
  14. break;
  15. ";
  16. print_r($ss);
  17. }
  18.  default:
  19.  include('news.php');
  20.  break;
  21.  }
  22.  break;
  23. default:
  24. include('news.php');
  25. break;
  26. }
  27. ?>


 
bon la j'ai mis un print_r qui ne sert a rien car je ne sais pas comment stocker tout sa pour que cela sois pris en compte
 
Un petit coup de main svp ???
 
Cela ne doit pas etre si compliquer mais je me prend la tete la dessus sans arriver a rien depuis 2h
 
merci de votre aide


Message édité par spidermas le 11-03-2009 à 07:06:05
Reply

Marsh Posté le 10-03-2009 à 10:43:25   

Reply

Marsh Posté le 10-03-2009 à 10:57:25    

Un foreach dans un switch ça me parait pas mal louche tout ça...
 
En supposant que tu ais un sous répertoire pages (ça me parait plus propre).
 

Code :
  1. <?php
  2.  
  3. // Sous répertoire "pages"
  4. $rep = dirname(__FILE__).'/pages/';
  5.  
  6. // Si c'est vide, on prend la page par défaut
  7. if(empty($rub))
  8.  require($rep.'news.php');
  9. else
  10. {
  11.  // Sinon on lit le contenu de notre répertoire
  12.  $dir = opendir($rep);
  13.  while( ($f = readdir($dir)) !== FALSE) {
  14.    if(is_file($rep.$f))
  15.      // Si ça correspond à ce qu'on veut on inclut et on stoppe la recherche
  16.      if(substr($f,0,-4) == $rub)
  17.      {
  18.        require($rep.$f);
  19.        break;
  20.      }
  21.  }
  22. }
  23. ?>


 
Bon c'est pas parfait, pas de page d'erreur par exemple...


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 10-03-2009 à 11:10:51    

ok sympa mais comment puise appeler les autres pages par exemple une page liens
 
index.php?rub=liens ?
 
edit :
 
j'ai rien dit sa marche impec merci


Message édité par spidermas le 10-03-2009 à 11:14:02
Reply

Marsh Posté le 10-03-2009 à 11:20:05    

Je vais simplifier en fait. Toujours avec un sous répertoire "pages" :

 
Code :
  1. <?php
  2.  
  3. // Sous répertoire "pages"
  4. $dir = dirname(__FILE__).'/pages/';
  5.  
  6. // Si $_GET['rub'] vide
  7. if(empty($_GET['rub']))
  8. {
  9.  // On prend news.php
  10.  require($dir.'news.php');
  11.  
  12.  // On s'arrête là
  13.  exit;
  14. }
  15.  
  16. // Sinon on liste les fichiers
  17. $files = glob($dir.'*.php');
  18.  
  19. // On cherche la rubrique
  20. if(in_array($_GET['rub'].'.php',$files))
  21.  // On trouve donc on inclut le fichier
  22.  require($dir.$_GET['rub'].'.php');
  23. else
  24.  // On a rien trouvé, page d'erreur
  25.  require($dir.'not-found-404.php');
  26. ?>
 

C'est fait de tête alors peu y avoir des erreurs.
Sinon normalement ça te permet d'inclure n'importe quel fichier contenu dans le répertoire "pages" en passant sont nom sans l'extension (.php) en GET dans rub.


Message édité par dwogsi le 10-03-2009 à 11:48:17

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 10-03-2009 à 11:34:18    

super :)
 
autre chose maintenant possible d'y mettre des exceptions ?
 
genre je ne veux pas qu'il prend en compte une page qui s'appel accueil.php dans la boucle


Message édité par spidermas le 10-03-2009 à 11:34:40
Reply

Marsh Posté le 10-03-2009 à 11:50:45    

voila rewritting mis en place :)
 
script fonctionne impec
 
merci bocoup
 
pas de faille dans se bout de code hein ?
 
 
j'ai tester ?rub=www.google.fr sa m'envoi sur not-found-404.php


Message édité par spidermas le 10-03-2009 à 11:53:02
Reply

Marsh Posté le 10-03-2009 à 15:42:07    

je suis face a un petit souci avec le script  
 
 
en fait si je ne met pas les pages a inclure dans le dossier pages et a la racine il me renvoie sur not-found-404.php  
 
je pense que le probleme viens du glob.
 
si je met  glob('*.php'); et que mes pages sont presente a la racine et dans /pages sa fonctionne
 
si je transforme en $files = glob('$dir/*.php'); il me renvoie sur not-found-404.php  
 
pourriez vous m'aider a determiner le probleme

Message cité 1 fois
Message édité par spidermas le 10-03-2009 à 15:51:03
Reply

Marsh Posté le 10-03-2009 à 16:20:47    

spidermas a écrit :

je suis face a un petit souci avec le script  
 
 
en fait si je ne met pas les pages a inclure dans le dossier pages et a la racine il me renvoie sur not-found-404.php  
 
je pense que le probleme viens du glob.
 
si je met  glob('*.php'); et que mes pages sont presente a la racine et dans /pages sa fonctionne
 
si je transforme en $files = glob('$dir/*.php'); il me renvoie sur not-found-404.php  
 
pourriez vous m'aider a determiner le probleme


var_dump()
Avec ça, tu vas pouvoir regarder ce qu'il y a dans tes variables.
Et il suffit de réfléchir un peu pour trouver d'où vient le problème.
 
Accessoirement, si tu as besoin d'avoir tes pages à la racine et dans pages/ c'est qu'il y a un gros problème...

Reply

Marsh Posté le 10-03-2009 à 17:30:04    

ok le glob retourne repertoire/fichier
 
c'est pour sa que if(in_array($_GET['rub'].'.php',$files)) ne fonctionne pas
 
comment faire pour ne garder que les fichier du repertoire sans afficher /pages ?


Message édité par spidermas le 10-03-2009 à 17:42:32
Reply

Marsh Posté le 11-03-2009 à 07:04:55    

rebonjour
 
voila c'est corrigé c'été tout con en fait :)
 
je met le code en cas ou sa sert a quelqu'un
 

Code :
  1. <?php
  2. $urr = $_GET['rub'];
  3. $urr2 = "pages/$urr.php";
  4. // Sous répertoire "pages"
  5. $dir = dirname(__FILE__).'/pages/';
  6. // Si $_GET['rub'] vide
  7. if(empty($_GET['rub'])){ 
  8. // On prend news.php   
  9. require($dir.'news.php'); 
  10. // On s'arrête là   
  11. exit;}
  12. // Sinon on liste les fichiers
  13. $files = glob('pages/*.php');  
  14. // On cherche la rubrique
  15. if(in_array($urr2, $files))   
  16. // On trouve donc on inclut le fichier   
  17. {
  18. require($dir.$_GET['rub'].'.php');
  19. }
  20. else   
  21. // On a rien trouvé, page d'erreur   
  22. {
  23. require($dir.'not-found-404.php');
  24. }
  25. ?>

Reply

Marsh Posté le 11-03-2009 à 07:04:55   

Reply

Sujets relatifs:

Leave a Replay

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