Bonjour à tous,
Je ne poste pas ici pour demander comment faire un script mais pour vous demander ce que pensez de cette méthode que je trouve bien trop complexe pour une si simple tâche..
Je développe :
Il s'agit d'un script permettant de gérer le contenu de ses pages selon l'activation ou non du Javascript par l'utilisateur de façon très simple et en PHP surtout.
De cette manière :
Mais pour cela il fallut que j'utilise des artifices assez extravagant, je détail ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?php if (!$_SESSION['js']) include_once 'gere_pas_js.php'; else include_once 'gere_js.php'; ?>
Tout en haut de chaque page je pense inclure ceci :
Et un peu plus bas entre les balises <head> et </head> :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <?php session_start(); $current_url = $_SERVER['REQUEST_URI']; if ($_GET['detected'] < (time() - 20) || !isset($_GET['detected'])) { $end_url = explode("?", $_SERVER['REQUEST_URI']); $_SESSION['old_get_vars'] = $end_url[1]; if (!preg_match("#^detected=.*$#", $_SESSION['old_get_vars'])) $filtred_args = explode("&detected", $_SESSION['old_get_vars']); $_SESSION['old_get_vars'] = $filtred_args[0]; $_SESSION['js'] = 1; } ?>
Le principe est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <?php if ($_GET['detected'] < (time() - 20) || !isset($_GET['detected'])) echo "<noscript><meta http-equiv=\"Refresh\" content=\"0;URL=include_de_test.php\"></noscript>"; ?>
L'utilisateur charge la page, on prétend qu'il a javascript activé, ci ce n'est pas le cas une redirection se fait entre les balises <noscript> et </noscript> qui l'amène sur une page mettant la variable de session "js" à 0.
Il est ensuite redirigé sur la 1ère page qui sera chargée en fonction de cette variable de session.
Si l'utilisateur a Javascript activé ce sera transparent pour lui et aucune redirection ne sera faite, donc pas gênant. Pour l'utilisateur ne le possédant pas il devra subir 2 redirections.
L'avantage c'est que de cette manière c'est très simple de gérer les cas avec ou sans Javascript.
Mais le soucis c'est que si le visiteur n'a pas Javascript, qu'il est averti sur le site et qu'il l'active, il faut que quand il actualise il soit pris en charge. Donc c'était un peu le bazard de savoir quand recharger la page pour que d'un coté il puisse activer Javascript quand il veut, et d'un autre que ça parte pas en boucle infinie.
J'ai donc utilisé time() en testant si la page a été détectée il y a plus ou moins de 20 secondes..
Mais il y avait aussi le problèmes des variables passées en paramètres par la méthode GET, il faut les conserver et ca oblige un petit parsing de la chaîne.. encore et encore du calcul..
Je ne maitrise pas encore bien PHP et il y a surement des méthodes de parsing bien plus efficaces et rapides pour faire ce que je fais avec 2 explode().
Pour cela je m'en remet aux spécialistes
Pour finir voila le code tout bête de la page de redirection, mais qui inflige encore pas mal de calcul au serv... :
Voila c'est un peu la galère de conditionner avec un langage serveur quelque chose qui dépend du client, et c'est il me semble totalement impossible à faire en 1 seul chargement de page.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?php session_start(); $_SESSION['js'] = 0; $old_vars = (!empty($_SESSION['old_get_vars'])) ? "?".$_SESSION['old_get_vars']."&detected=".time() : "?detected=".time(); echo "<meta http-equiv=\"Refresh\" content=\"0; test.php".$old_vars."\">"; ?>
J'ai pas mal cherché sur le net une solution simple et rapide mais sans succès, c'est toujours des magouilles parfois allant assez loin pour finalement pas grand chose.
Voila merci d'avoir lu le pavé.. j'espère que ca pourra quand même aider certains d'entre vous qui se demandais comment faire![]()
Partager