Rechercher : dans
Par :

Récupération d'une résolution php/javascript

Dernière réponse le 15 oct 2009 à 10:19:52 YoshK, le 14 oct 2009 à 12:25:28 
 Signaler ce message aux modérateurs

Bonjour, je rencontre un problème pour détecter la résolution de l'utilisateur via javascript et la transférer dans une variable PHP:

Je pensai que cela allez suffire:
<?php $size = echo '<script language=\"JavaScript\">screen.width</script>'; ?>

Mais une erreur m' est retourné, pour précision j'utilise la variable $size pour permettre l'adaptation de mes images (bannière, menu, ...) à la résolution de l'utilisateur via d'autres variables:

<?php
if ($size <= 900)
{
$banniere = 800;
$menu = 'P';
}
else ($size >= 1300)
{
$banniere = 1280;
$menu = 'G';
}
else
{
$banniere = 1024;
$menu = 'M';
}
?>

Merci d'avoir prit la peine de lire mon problème !

Configuration: Windows XP
Firefox 3.5.3

1

kij_82, le 14 oct 2009 à 13:24:49

Bonjour,

Attention, le PHP est une langage qui s'exécute coté serveur, alors que le javascript s'exécute coté client.
Conclusion, dans ton code, ce qui est mis dans ta variable PHP n'est pas la résultante de ton code javascript, mais ton code lui même (sous forme de texte)

L'erreur affiché est donc plutôt logique et normale. Tu ne peux pas procéder de cette façon.

Ce qu'il faut faire :
Gérer des fichiers CSS différent, que tu charge en fonction de la résolution détectée.

Par exemple, tu as fais 3 fichiers CSS dans lesquels tu as définie 3 classes de style, une pour chaque style de bannière / menu (il faut donc que tu traduise $bannière et $menu sous forme de propriété CSS)
Ensuite, avant de chargé ta page PHP courante, tu vas exécuter le code javascript qui permet de détecter la résolution, et en fonction de la résolution (toujours en code javascript donc), tu vas charger le fichier CSS correspondant.

C'est une manière comme une autre de le faire.

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :)    ~

Répondre à kij_82

2

YoshK, le 14 oct 2009 à 15:01:09

Merci pour ton aide, une fois posé le problème était effectivement évident. J'ai cependant trouvé une solution autre, l'utilisation d'une page supplémentaire contenant un formulaire caché pour transmettre la résolution de l'utilisateur:

<body onload="document.formRes.resolution.value = screen.width; document.formRes.submit();">
<p style="text-align:center">Vous allez être redirigé dans quelques secondes...<br/>
si la redirection automatique ne fonctionne pas cliquez <a href="accueil.php">ici</a></p>
<form method="post" action="accueil.php" name="formRes">
	<input type="hidden" name="resolution">
</form>
</body>


récupéré par la suite sur la page principale du site:

$size = $_POST['resolution'];


la redirection est en réalité instantanée mais on prévoit le cas ou le serveur serait saturé...

Répondre à YoshK

3

YoshK, le 14 oct 2009 à 15:42:33

J'ai cependant un autre problème, la résolution est enregistré dans une variable de session pour être effective sur toute les pages de mon site web.

Voila la nouvelle allure de mon include PHP:

<?php
                if ( isset($_POST['resolution']))
			$_SESSION['resolution'] = $_POST['resolution'];
			
		if ($_SESSION['resolution'] <= 900)
		{
			$banniere = 800;
			$menu = 'P';
		}
		else if ($_SESSION['resolution'] >= 1200)
		{
			$banniere = 1280;
			$menu = 'G';
		}
		else
		{
			$banniere = 1024;
			$menu = 'M';
		}
	?>


Le problème est que lorsque j'accède à une nouvelle page du site, j'obtiens un jolie message d'erreur:
"Notice: Undefined index: resolution in C:\...\monInclude.php on line 21"
la ligne 21 correspondant au début de mon "if"...

Répondre à YoshK

4

kij_82, le 14 oct 2009 à 16:59:29

Est-ce que tu as bien l'instruction 'session_start()' au début de toutes tes pages PHP ?

Peux-tu mettre le code entier (pour l'accueil)?

Au pire, essai de mettre l'identifiant dans ton champ caché (sur ta page intermédiaire) (<input type='hidden' id='resolution' name='resolution' ... />)

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :)    ~

Répondre à kij_82

5

YoshK, le 15 oct 2009 à 08:14:30

Excellente analyse kij ! C' étais un test ;)

C'est clair et net je suis malade... J'ai oublié d'inclure le fichier qui comporte les fonction php de connexion a la BDD et... Le "session_start" :s

Encore merci à vous deux !

Répondre à YoshK

6

 kij_82, le 15 oct 2009 à 10:19:52

Je sais bien que je suis skyzo, mais tu peux te contenter de ne remercier qu'un seul moi ;)

Bon courage pour la suite.

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :)    ~

Répondre à kij_82