Bonjour à tous,
j'explique ce que j'essaie de faire avec la fonction redirect() (dans include/functions.inc.php) puisque cela semble poser problème.
Cette fonction au fil des révisions devient de plus en plus complexe et de plus en plus difficile à maintenir. Cette fonction devrait faire une redirection http. On l'utilise notament lorsqu'on place un cookie et que l'on veut être dans la situation où il exitse, c'est-à-dire sur la page suivante. On l'utilise aussi juste après l'identification ou la déconnexion.
Dans l'idéal cette fonction devrait se résumer à:
function redirect( $url ) { header("Location: http://{$_SERVER['SERVER_NAME']}/$url"); exit(); }
Il n'en est rien car elle n'est pas toujours appelée au bon endroit (c'est-à-dire avant tout envoi de données (html, css, js, ...) au client) et du coup on pallie au mieux en faisant une redirection côté client en utilisant le tag meta http-equiv="refresh" avec une redirection immédiate (content=0). Cette redirection côté client est évidemment non fiable et on ajoute un lien pour rediriger vers la bonne page au cas où.
Pour avoir une fonction redirect() telle que celle dans le code ci-dessus il faudrait s'assurer de faire la redirection avant tout inclusion de fichier potentiellement modifié par les utilisateurs, tels que include/config_local.inc.php
Pour ne pas complexifier encore et encore cette fonction je propose de lui dédier un template spécifique qui ne contiendrait que le lien de redirection. Pour ne pas dépendre du contexte et du thème choisi, je propose de placer ce template dans le répertoire template-common. Pour ne pas complexifier les scripts page_header.php et page_tail.php, je propose de regrouper les templates header.tpl, footer.tpl et redirect.tpl dans un même template appelé directement dans la fonction redirect().
Je suis à la première étape où j'ai regroupé les 3 fichiers. J'ai d'autre part simplifié la fonction redirect().
Dans une deuxième étape, on pourrait améliroer le "rendu" de cette page mais qui je le rappelle ne s'affiche que le temps de la redirection faite par le navigateur. Sur mon poste je ne vois jamais cette page.
Hors ligne
rvelices a écrit:
C'est peut etre une amelioration au niveau de code, mais
1. Je travaille toujours en theme dark et maintenant chaque fois qui'il y a redirection, il y a une page entierement blanche affichee rapidement dans mon navigateur.
Je propose de régler ça dans une deuxième étape.
rvelices a écrit:
2. Notice: Undefined variable: user in D:\pwg\bsf\include\functions.inc.php on line 584
commit trop rapide. J'ai oublié d'enlever du code qui m'a servit à débugger!
Corrigé: [Subversion] r1509
rvelices a écrit:
3. Pendant le dev je me suis deja servi pour debugger les requetes sql et le temps d'execution affichees normalement dans le footer (c'est perdu maintenant)
Je ne comprends pas pourquoi tu le fais ici mais quoi qu'il en soit on peut remettre les informations du footer.
rvelices a écrit:
4. le titre de ta page t'aurais du faire un strip_tags
oui.
rvelices a écrit:
Je suis d'accord avec chrisaga que c'est mieux si on utilise le header/footer du template
Je le répète: le header et le footer y sont mais sous une forme simplifié pour ne pas dépendre du thème.
Mon idée est de réduire la fonction redirect() à celle qu'elle devrait être, à savoir celle du premier message de ce sujet.
Dernière modification par nicolas (2006-07-28 09:55:35)
Hors ligne
z0rglub a écrit:
(on a perdu les posts de rvelices et chrisaga dans ce topic ?)
Pourquoi tu dis ça ? On peut les recopier. Il n'y en avait pas. J'ai repris le message de rvelices postés dans Mantis.
Hors ligne
En effet, je me suis rendu compte a posteriori que les messages de rvelices et chrisaga que tu cites sont dans le bugtracker. Difficile de suivre la conversation quand elle a lieu à 2 endroits différents :-/.
Hors ligne
Attention, je suis ca de loin, mais je sais que j'ai utlisé la notion de redirection pour la notification par mail.
Mais pas dans un cas "classique".
Je l'ai utilisé dans mon traitement pour outrepasser le timemout (les "vrais" fonctions le permettant étant non dispo chez Free, par exemple).
Donc une redirection avec comme url une page particulière et un temps d'attente de zéro.
On utilise les mêmes procédures pour chaque cas, mais je penses que plusieurs fonctions seraient peut-être mieux!
Qq'1 peut-il faire un point de l'endroit ou est utilisé un redirect et pour faire quoi?
Hors ligne
Si le but final est d'utiliser le header Location, d'accord - mais ca ne va pas trop marcher si les entetes http ont deja ete envoye. Sinon je ne vois aucun interet de la mettre en template-common et ensuite la personnaliser selon le theme.
En plus il faut que tu remettes les choses en page_header, car le slideshow et la notification par mail utilisent le meta refresh.
nicolas a écrit:
Je ne comprends pas pourquoi tu le fais ici mais quoi qu'il en soit on peut remettre les informations du footer.
Pour le debug des requetes sql: il y a plusieurs redirections en picture suite au "set as representative", "add to caddie", "rate" ... En desactivant le meta redirect sur le navigateur je me suis servi pour debugger les requetes sql.
Hors ligne
rvelices a écrit:
Si le but final est d'utiliser le header Location, d'accord - mais ca ne va pas trop marcher si les entetes http ont deja ete envoye.
Je sais bien mais je compte bien trouver un moyen de le gérer correctement sans cette redirection bancale.
rvelices a écrit:
Sinon je ne vois aucun interet de la mettre en template-common et ensuite la personnaliser selon le theme.
Je ne veux pas intégrer de thème.
rvelices a écrit:
En plus il faut que tu remettes les choses en page_header, car le slideshow et la notification par mail utilisent le meta refresh.
c'est fait. [Subversion] r1512
Hors ligne
A l'origine, les redirections utilisaient la directive "header". Devant le nombre de retour sur le forum à l'époque à cause des problèmes de caractères écrits avant le header, comme un caractère après le "?>" de include/mysql.inc.php, j'ai switché la redirection en meta-refresh HTML. Je préfère de beaucoup cette méthode, mais alors franchement beaucoup. C'est d'ailleurs la méthode que l'on retrouve sur de très nombreux projets et c'est à la fois efficace et ça marche partout.
Bref, je ne vois pas l'intérêt de repasser à header :-/
Hors ligne
J'ai ma BSF qui boucle à l'infini avec $conf['guest_access'] = false;
Et j'ai ca qui s'affiche sur fond blanc:
Notice: Undefined index: language in d:\dev\bsf\include\functions_user.inc.php on line 527 Redirection... Cliquez ici si votre navigateur ne vous redirige pas.
Hors ligne
rvelices a écrit:
Sinon je ne vois aucun interet de la mettre en template-common et ensuite la personnaliser selon le theme.
Moi non plus.
Je n'ai pas tout analysé, mais je ne vois pas en quoi cette modif du template aide à simplifier le redirect.
En quoi c'est beaucoup plus simple que d'appeler header.tpl, redirect.tpl, et enfin footer.tpl comme c'est fait partout dans PWG ?
<:o|
Hors ligne
nicolas a écrit:
Je me suis désassigné de la fonctionnalité si cela intéresse quelqu'un de faire les développements nécessaires.
Pourquoi ?
Simplifier le redirect est probablement une bonne idée s'il est trop complexe et/ou mal utilisé.
Tu peux sans doute y arriver en tenant compte de ce qu'a dit z0rglub (header/pas header , je n'ai pas regardé, ça me dépasse un peu),
et ce que d'autres ont dit sur l'utilisation du template.
<:o)
Hors ligne
nicolas a écrit:
Je me suis désassigné de la fonctionnalité si cela intéresse quelqu'un de faire les développements nécessaires.
Et pour le problème que j'avais indiqué?
rub a écrit:
J'ai ma BSF qui boucle à l'infini avec $conf['guest_access'] = false;
Et j'ai ca qui s'affiche sur fond blanc:Code:
Notice: Undefined index: language in d:\dev\bsf\include\functions_user.inc.php on line 527 Redirection... Cliquez ici si votre navigateur ne vous redirige pas.
Hors ligne
rub a écrit:
nicolas a écrit:
Je me suis désassigné de la fonctionnalité si cela intéresse quelqu'un de faire les développements nécessaires.
Et pour le problème que j'avais indiqué?
rub a écrit:
J'ai ma BSF qui boucle à l'infini avec $conf['guest_access'] = false;
Et j'ai ca qui s'affiche sur fond blanc:Code:
Notice: Undefined index: language in d:\dev\bsf\include\functions_user.inc.php on line 527 Redirection... Cliquez ici si votre navigateur ne vous redirige pas.
En fait, le problème ne provient pas de la redirection mais des sessions.
Ayant descendu, les 2 modifications en même temps, il y a eu amalgame!
Hors ligne