[RESOLU] Aide passage asp en php

Aide passage asp en php [RESOLU] - PHP - Programmation

Marsh Posté le 11-08-2006 à 14:33:28    

Bonjour,
 
J'avais un ancien site, "développé" en asp (l'intérêt de l'asp résidait essentiellement dans le fait de pouvoir appliquer des feuilles de styles variables selon le navigateur et la rubrique, d'avoir une entête et un pied de page commun à tout le site et des menus de rubrique générés automatiquement en fonction du contenu des répertoires de rubrique... bref, pas grand chose en terme de "développement" ) avec beaucoup d'aide mais pour diverses raisons je souhaite passer maintenant en php.
 
Je bloque sur deux choses :
 
1 - Identification du navigateur et récupération du nom de rubrique dans l'URL de la page, réutilisation de la rubrique pour utiliser la css qui convient.
 
Mon include top.asp, présent sur toutes les pages du site, commence ainsi en asp :
 

Code :
  1. <% 'Include top
  2. URL = Request.ServerVariables("URL" )
  3. 'On obtient : /rubrique/mapage.asp ou rubrique/sousrubrique/page.asp
  4. p=instr(2,URL,"/" ) 'On cherche le second slash
  5. rub=mid(URL,2,p-2) 'On extrait le nom de la rubrique
  6. repage = "/" 'répertoire principal
  7. repimg = "/pix" 'répertoire des images
  8. imgperso = "/pix/perso/" 'r&eacute;pertoire des images perso
  9. imgamp = "/pix/amp/" 'r&eacute;pertoire des images amp
  10. imgmusic = "/pix/music/" 'r&eacute;pertoire des images music
  11. imggreen = "/pix/green/" 'r&eacute;pertoire des images perso
  12. 'Quel navigateur ?
  13. if inStr(Request.ServerVariables("HTTP_USER_AGENT" ),"MSIE" )=0 then
  14. Nav="NN"
  15. else Nav="IE"
  16. end if
  17. %>
  18. <HTML>
  19. <HEAD>
  20. <TITLE><%=pageTitle%></TITLE>
  21. <!-- Feuille de styles adaptées au navigateur -->
  22. <LINK REL="stylesheet" TYPE="text/css" HREF="/css/<%=rub&Nav%>.css">
  23. <basetarget="_blank">
  24. </HEAD>


 
Je souhaite faire l'équivalent en php.
 
Pour l'adaptation de la css au navigateur, j'ai indiqué :

Code :
  1. <? // Quel navigateur ?
  2. $nav = getenv("HTTP_USER_AGENT" );
  3. if(strpos($nav,"MSIE" )) $nav="IE";
  4. else $nav="NN"; ?>


Puis entre les balises <HEAD> :

Code :
  1. <LINK REL="stylesheet" TYPE="text/css" HREF="<? echo $nav; ?>.css">


Jusque là ça fonctionne.
 
Là où je coince c'est pour extraire de l'URL la rubrique et la réutiliser ensuite.
J'ai essayé diverses variations avec strpos() et substr() sans succès.... mais je reconnais que j'essaie d'arriver directement au résultat sans passer par les bases de php (je n'ai besoin que des deux points exposés ici pour que mon site tourne, du coup j'ai envie d'avoir un résultat rapidement sad) ce qui explique sans doute  pourquoi je bloque.
 
Mon dernier essai ne provoque pas de message d'erreur, mais ça ne marche pas plus :

Code :
  1. <? function url()
  2. {return "http://" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];}
  3. // Ca va donner un truc du genre /rubrique/mapage.asp ou rubrique/sousrubrique/page.asp
  4. $p = 'strpos($url,"/"[,$2])'; //Tu cherches le second slash
  5. $rub = 'substr($url,"2"[,$p-2])'; //Tu extrais le nom de ta rubrique
  6. $repage = '/' ; //répertoire principal
  7. $repimg = '/pix' ; //répertoire des images
  8. $repimgperso = '/pix/perso/' ; //r&eacute;pertoire des images perso
  9. $repimgamp = '/pix/amp/' ; //r&eacute;pertoire des images amp
  10. $repimgmusic = '/pix/music/' ; //r&eacute;pertoire des images music
  11. $imggreen = '/pix/green/' ; //r&eacute;pertoire des images perso  ?>
  12. <? // Quel navigateur ?
  13. $nav = getenv("HTTP_USER_AGENT" );
  14. if(strpos($nav,"MSIE" )) $nav="IE";
  15. else $nav="NN"; ?>
  16. <HTML>
  17. <HEAD>
  18. <TITLE><? echo $titre; ?></TITLE>
  19.    <LINK REL="stylesheet" TYPE="text/css" HREF="/css/<? echo $rub; echo $nav; ?>.css">


 
2 - Un menu automatique en lisant le contenu du répertoire de la rubrique.
 
en asp ça donnait :

Code :
  1. <% Set FSO = Server.CreateObject("Scripting.FileSystemObject" )
  2. 'on r&eacute;cup&egrave;re le path long du fichier courant
  3. dir=Server.MapPath("." )
  4. 'on positionne le pointeur le long du dossier dans lequel est le fichier courant
  5. set foldPt = FSO.GetFolder(dir)
  6. 'on lit la collection de fichiers du dossier
  7. set fc = foldPt.Files %>
  8. Menu :<br>
  9. <BR>
  10.     <%for each f in fc
  11.     ' ouvre chaque fichier
  12.     set inF=FSO.openTextFile(dir&"/"&f.name,1,false)
  13.     ' saute 2 lignes
  14.     inF.skipLine : inF.skipLine
  15.     ' lit la 3ème
  16.     temp=inF.readLine
  17.     ' ferme le fichier
  18.     inF.close
  19.     ' et vire les bouts
  20.     temp=mid(temp,9,len(temp)-11)%>
  21.     <A HREF="<%=f.name%>"><%=temp%></A><BR>
  22.     <%next%>


 
Si une âme charitable pouvait me donner un coup de pouce, ça serait grandement apprécié.
Merci d'avance !


Message édité par Phoebe2006 le 14-08-2006 à 23:55:35
Reply

Marsh Posté le 11-08-2006 à 14:33:28   

Reply

Marsh Posté le 11-08-2006 à 17:52:16    

Adapter une feuille de style en fonction du navigateur n'est pas la meilleur des solutions.
 
Tu devrais reprendre ton CSS et le retoucher pour obtenir une feuille de style homogène de façon à ce que l'affichage soit équivalente quelque soit le navigateur utilisé.
 
C'est un choix mais c'est plus se compliquer la vie que de la simplifier.
 
Je n'ai pas eu le courage de lire le reste, désolé.

Reply

Marsh Posté le 11-08-2006 à 18:17:16    

Comme les css sont déjà faites (le site était fonctionnel en asp), je peux pour le moment conserver les différences selon les navigateurs :)  
Si j'avais opté pour des css différentes, c'est parce que je n'arrivais pas à obtenir un résultat qui me satisfasse à la fois sous NN/Firefox et sous IE... là j'ai quelque chose qui me convient parfaitement sous Firefox / NN et j'ai fait quelques changements pour que sous IE ça ne soit pas trop moche, mais ce n'est pas optimisé du tout pour IE.
Ceci dit, peut-être qu'en m'y replongeant maintenant, j'obtiendrai un résultat qui me plaise : merci pour la suggestion, qui sera à explorer plus tard... le plus urgent pour moi c'est d'arriver à faire varier la feuille de style aussi en fonction de la rubrique et d'arriver à générer le menu en fonction des fichiers présents dans le répertoire de la rubrique.


Message édité par Phoebe2006 le 11-08-2006 à 18:17:29
Reply

Marsh Posté le 11-08-2006 à 18:43:09    

Petite précision, au lieu d'utiliser STRPOS (Fonction qui pas trop prévu pour la recherche d'une chaine), tu devrais plutot utiliser EREG comme le montre cet exemple :
http://www.toutestfacile.com/php/c [...] predef.php

Reply

Marsh Posté le 11-08-2006 à 19:03:03    

Et dans ce cas, plutôt qu'une extraction "automatique" de la rubrique à partir de l'URL comme ça se faisait en asp, il va falloir que je traite chaque "cas" individuellement, non ?  
Je crois qu'effectivement, ça sera plus simple, moins optimisé peut-être (par rapport à la solution asp) mais ça me paraît plus à ma portée.
Merci !

Reply

Marsh Posté le 11-08-2006 à 19:27:20    

Pour la feuille de style, j'ai réussi à faire fonctionner avec ereg(), merci !
 
Allez, je planche sur la question du menu qui se génère tout seul en lisant le contenu du répertoire maintenant...


Message édité par Phoebe2006 le 11-08-2006 à 19:27:58
Reply

Marsh Posté le 11-08-2006 à 20:37:17    

Phoebe2006 a écrit :

Et dans ce cas, plutôt qu'une extraction "automatique" de la rubrique à partir de l'URL comme ça se faisait en asp, il va falloir que je traite chaque "cas" individuellement, non ?  
Je crois qu'effectivement, ça sera plus simple, moins optimisé peut-être (par rapport à la solution asp) mais ça me paraît plus à ma portée.
Merci !


Pour récupérer une variable dans une URL comme par exemple : index.php?ma_variable=Toto
Tu fais simplement ceci : $m = $_GET['ma_variable']; ($m étant un nom de variable au hasard)
Je ne sais pas si c'est exactement que tu voulais. Sinon, explique un peu plus car je ne comprend pas trop.


Message édité par AlphaZone le 11-08-2006 à 20:37:52
Reply

Marsh Posté le 11-08-2006 à 22:48:23    

J'ai procédé comme ça finalement :

Code :
  1. <?php
  2. if (ereg("amp", getcwd())) {
  3.     $rub = "amp";
  4. } else if (ereg("perso", $url)) {
  5.     $rub = "perso";
  6. } else if (ereg("green", $url)) {
  7.     $rub = "green";
  8. } else if (ereg("books", $url)) {
  9.     $rub = "books";
  10. } else if (ereg("music", $url)) {
  11.     $rub = "music";
  12. } else if (ereg("site", $url)) {
  13.     $rub = "site";
  14. } else {
  15.     $rub ="";
  16. }
  17. ?>


 
En fait à la racine de mon site il y a des répertoires :
amp
green
etc.
Chacun d'eux correspond à des "rubriques"
Les URLs des pages sont donc de la forme : www.truc.com/rubrique/page.php
Mais il y en a aussi qui sont de la forme : www.truc.com/rubrique/sousrubrique/page.php
La partie que je veux récupérer c'est "rubrique" pour pouvoir dans mon include top.php présent sur chaque page ajouter un lien vers la css de type rubrique.css
Je ne sais pas si c'est plus clair comme ça.
 
En tous cas, ça marche comme ça, même si ce n'est pas optimum, ça fonctionne.  
Merci pour le coup de pouce vers erge() !


Message édité par Phoebe2006 le 11-08-2006 à 23:46:09
Reply

Marsh Posté le 11-08-2006 à 23:09:01    

J'ai compris ce que tu voulais dire.
 
En revanche, je pense que tu devrais te poser la question suivante : est-ce la bonne méthode ?
 
Je suis mal placé pour parler de ca mais personnelement, ca ne me rassure pas.

Reply

Marsh Posté le 11-08-2006 à 23:36:06    

Citation :

En revanche, je pense que tu devrais te poser la question suivante : est-ce la bonne méthode ?


 
Tu parles de ce que j'ai fait avec ereg() ?
Ou de la façon dont je veux adapter la css à la rubrique ?
Et pourquoi ça ne te rassure pas ?
 
Sinon, pour le menu : j'arrive à faire lister le contenu de chaque rubrique de la façon suivante :

Code :
  1. <?
  2. $dossier = opendir ("." );
  3. while ($fichier = readdir ($dossier)) {
  4.     if ($fichier != "." && $fichier != ".." ) {
  5.         echo $fichier.'<br />';
  6.     }
  7. }
  8. closedir ($dossier);
  9. ?>


 
J'obtiens évidemment quelque chose du style :
index.php (dont $desc = accueil)
jtruc.php (dont $desc ="page1" )
etc.  
 
OK.
Ce que je voudrais idéalement c'est que pour chaque fichier ce soit sa description (définie par $desc) qui s'affiche, sous forme de lien vers le fichier :
accueil (lien)
page1 (lien)
etc.

Message cité 1 fois
Message édité par Phoebe2006 le 11-08-2006 à 23:43:49
Reply

Marsh Posté le 11-08-2006 à 23:36:06   

Reply

Marsh Posté le 12-08-2006 à 08:53:06    

Phoebe2006 a écrit :

Citation :

En revanche, je pense que tu devrais te poser la question suivante : est-ce la bonne méthode ?


 
Tu parles de ce que j'ai fait avec ereg() ?
Ou de la façon dont je veux adapter la css à la rubrique ?
Et pourquoi ça ne te rassure pas ?
 

Code :
  1. <?
  2. $dossier = opendir ("." );
  3. while ($fichier = readdir ($dossier)) {
  4.     if ($fichier != "." && $fichier != ".." ) {
  5.         echo $fichier.'<br />';
  6.     }
  7. }
  8. closedir ($dossier);
  9. ?>




 
L'utilisation du ereg est bien, mais ce sont les if et le manque de test qui me font un peu peur.
 
La lecture de ton répertoire est ok mais ca manque encore de test. Je te conseil vivement de tester ce que chaque fonction te renvoie genre un FALSE en cas d'échec. Ca te permettra de savoir d'où vient le problème en cas d'erreur.

Reply

Marsh Posté le 12-08-2006 à 09:03:07    

Citation :

L'utilisation du ereg est bien, mais ce sont les if et le manque de test qui me font un peu peur.


 
Je ne vois pas bien ce qu'il faudrait que je teste ? Peux-tu développer ta pensée ?
Ah, si, par exemple il teste la présence de music dans l'url mais si j'ai quelque chose du genre site.com/livres/music.php il va croire que c'est la rubrique music, c'est ça ?
Merci

Message cité 1 fois
Message édité par Phoebe2006 le 12-08-2006 à 10:15:58
Reply

Marsh Posté le 12-08-2006 à 14:02:14    

Phoebe2006 a écrit :

Citation :

L'utilisation du ereg est bien, mais ce sont les if et le manque de test qui me font un peu peur.


 
Je ne vois pas bien ce qu'il faudrait que je teste ? Peux-tu développer ta pensée ?
Ah, si, par exemple il teste la présence de music dans l'url mais si j'ai quelque chose du genre site.com/livres/music.php il va croire que c'est la rubrique music, c'est ça ?
Merci


 
Le souci est que ne procède pas comme ca, du coup, je ne peux pas trop m'avancer sur mes explications et je ne voudrais pas t'induire en erreur. Comme je te l'ai dis, je suis mal placé pour parler de ca.

Reply

Marsh Posté le 12-08-2006 à 14:10:20    

Comment est-ce que tu procèderais alors ?

Reply

Marsh Posté le 12-08-2006 à 21:07:57    

Je mets tout à la racine et je fais appelle à différentes pages. Y'a rien d'extraordinaire.


Message édité par AlphaZone le 12-08-2006 à 21:20:30
Reply

Sujets relatifs:

Leave a Replay

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