Obtenez de l'utilisateur de l'écran&dimensions de la fenêtre d'affichage en php lors du premier chargement
Je veux la faire en PHP la hauteur/largeur de l'écran et la fenêtre d'affichage lorsqu'un utilisateur visite une page.
J'ai essayé de différentes manières, mais ils ont tous causer d'autres problèmes.
Mes objectifs:
- Obtenir de l'information sur la première charge (pas de saut de page, pas de rechargement).
- Pas modifier l'url
- Pas d'incidence sur le reste du PHP qui s'exécute sur la charge, ou le faire que PHP
exécutez deux fois
Ce que j'ai essayé jusqu'à présent:
Javascript pour obtenir la fenêtre d'affichage dimensions:
if(!isset($_POST['width']) || !isset($_POST['height'])) {
echo '
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
var height = $(window).height();
var width = $(window).width();
$.ajax({
type: \'POST\',
data: {
"height": height,
"width": width
},
success: function (data) {
$("body").html(data);
},
});
});
</script>
';
}
$user_width = $_POST['width'];
$user_height = $_POST['height'];
problèmes: causes toutes php pour exécuter deux fois, une fois sur la charge, une fois quand elle retourne une valeur (le deuxième temps est d'environ 4 secondes après la première), ce qui rend le reste de l'php loufoque... facilite le chargement de la page très lent
Mettre les dimensions de l'écran dans l'url:
if(isset($_SESSION['screen_width']) AND isset($_SESSION['screen_height'])){
$user_width = $_SESSION['screen_width'];
$user_height = $_SESSION['screen_height'];
} else if(isset($_REQUEST['width']) AND isset($_REQUEST['height'])) {
$_SESSION['screen_width'] = $_REQUEST['width'];
$_SESSION['screen_height'] = $_REQUEST['height'];
header('Location: ' . $_SERVER['PHP_SELF']);
} else {
echo '<script type="text/javascript">window.location = "' . $_SERVER['PHP_SELF'] . '?width="+screen.width+"&height="+screen.height;</script>';
}
problèmes: modifie l'url (qui affecte le code des autres et est de mauvaise qualité comparé à d'inexpressif url de ce qu'ils ont maintenant); ne retourne pas de taille de la fenêtre autant que je sache
Je suis un noob. Peut-être que c'est facile à faire, mais je ne sais vraiment pas. J'ai beaucoup cherché. Que j'ai méthodes ci-dessus. Mais je ne pouvais pas les faire travailler pour moi. Autant que je sache, je n'ai pas vu une solution de n'importe où à une situation similaire.
Merci 🙂
Oui. Je comprends Php côté serveur. C'est pourquoi je vais avoir le problème. Comme j'indique ci-dessus, j'ai fait d'utiliser javascript pour obtenir les dimensions et les poster sur PHP. Cela fonctionne, mais il provoque le problème de l'exécution de toutes les php à nouveau (ce qui sur mon site cause double sorties, loufoque, résultats, etc). Peut-être il ya une meilleure façon de le poster à partir de javascript PHP que ce que je suis en train de faire? Merci..
OriginalL'auteur kenji359 | 2013-08-07
Vous devez vous connecter pour publier un commentaire.
Comment au sujet de votre document prêt à l'AJAX demande d'envoyer à un autre document PHP, puis de l'inclure dans la tête, le chargement de la page. De cette façon, vous pouvez avoir tout ce que HTML spécifique que vous souhaitez charger directement dans le corps lorsque vous êtes prêt.
Par exemple:
Et puis votre
body.php
fichier devrait ressembler à quelque chose comme:Ensuite, si vous ne voulez pas que JS fonction à exécuter à chaque chargement de la page, juste envelopper le tout dans un
<?php if(isset($_SESSION['screen_height'])) { //JS function } ?>
Je ne suis pas 100% sûr de ce que vous avaient l'intention de faire avec les dimensions une fois que vous les avez, donc je m'excuse si ma réponse est un peu vague, mais en le faisant de cette manière, la page, seul le sauvé des dimensions lors de la première visite de cette session de navigation, et il n'a pas de redirection, donc j'espère que c'est au moins un peu utile 🙂
Avez-vous encore un peu de code de la soumission à la page? Le code je l'ai suggéré, devrait être entièrement asynchrone mais il n'est pas d'arrêter tout ce qui encore actualise ou soumet sur la page en cours d'exécution. J'ai remarqué que j'avais raté une clôture
});
sur l'appel AJAX mais ça ne devrait pas influer sur la page rafraîchissanteVotre idée a fonctionné: split-il dans un document PHP, puis exécutez la fonction JS que lorsque screen_height isset. Ce qu'est un gros travail, juste pour obtenir de l'utilisateur de la fenêtre d'affichage dimensions dans une base de données sans causer d'autres problèmes... Merci pour votre aide 🙂
Oui, c'est un peu une solution de contournement, mais arriver client informations de côté de côté de serveur a toujours un peu de faffing nécessaire!
OriginalL'auteur Matt
Je pense que c'est mieux de se demander: Que voulez-vous faire avec le
width
etheight
? Et regarde si il y a d'autres façons de réaliser cet objectif. Vous ne pouvez pas obtenir à l'utilisateur son écran, la largeur et la hauteur à l'aide de PHP, car il s'exécute côté serveur.De sorte que ces données est jamais disponible lors de la première charge.
Vous pourriez présenter les données à l'aide d'AJAX et ensuite faire les modifications apportées à la page à l'aide de JavaScript. Alors le prochain rechargement de la page de données est stocké, du côté de serveur disponible.
Créez un autre fichier PHP qui stocke les données. Un rafraichissement de la page n'est pas évitable, je pense. Vous pourriez peut-être d'actualisation des articles de votre page avec AJAX, si nécessaire.
OriginalL'auteur Matthijs