PHP/JavaScript : Cookie et Popup

Fermé
Sellas - 16 mars 2009 à 17:25
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 17 mars 2009 à 12:59
Bonjour,

J'utilise SPIP comme CMS et le principe est que le serveur va sur index.php qui appelle spip.php, qui lui appelle le squelette sommaire.html.

J'ai une page index.php avec le code suivant :
<?php
if (isset($_COOKIE['CookieVisiteVirtuelle'])) {
	header('location:spip.php');
}
else {
	header('location:prehome.php');
}
?>


et une page (vide) prehome.php :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?php // Envoi d'un cookie qui restera prsent 24 heures
setcookie('CookieVisiteVirtuelle', '1', (time() + 3600*24), '/');
header("Refresh: 10; URL=http://localhost/spip/" );
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Prehome</title>
</head>
<body>
</body>
</html>


Lorsque je vais sur ma page d'accueil, soit le cookie "CookieVisiteVirtuelle" est présent dans le cache du navigateur, alors je suis redirigé vers spip.php, soit il n'existe pas et je suis redirigé vers prehome.php où le cookie se crée. Cela me permet de ne plus être redirigé vers la prehome dans la journée.

Jusque là tout va bien.
Maintenant je souhaite insérer une modalbox sur ma page d'accueil (spip.php qui va chercher le squelette "sommaire.html") plutôt que d'utiliser une page intermédiaire de prehome.

Dans ma page "sommaire.html" j'ai dans le "head" :
<script type="text/javascript" src="includes/prototype.js"></script>
<script type="text/javascript" src="includes/scriptaculous.js?  
    load=effects"></script>
<script type="text/javascript" src="includes/modalbox.js"></script>


ainsi que :
 onLoad="Modalbox.show('prehome.php')"

dans le body de cette même page.

Je tiens à préciser que j'ai déjà mis en place la modalbox sur une page et que cela fonctionne. Une fenêtre du type popup apparaît sur ma page d'accueil avec le contenu de "prehome.php" (ici vide).

Je souhaite donc lier mon principe de prehome + cookie avec celui de la modalbox. C'est à dire que lorsque j'arrive sur ma page d'accueil, je ne sois pas redirigé comme avant mais que la modalbox apparaisse seulement la première fois de la journée que je vais sur la page d'accueil spip.php.

Après avoir testé toutes sortes de solutions, j'en ai conclus que mon cookie ne se créait pas à l'ouverture de ma popup car l'URL ne changeait pas.

Je voudrais que ma page index.php pointe tout le temps vers spip.php sauf que si le cookie "CookieVisiteVirtuelle" n'existe pas, la modalbox se lance et s'il existe, elle ne se lance pas.
J'ai donc tenté quelque chose comme ça :

<?php
if (isset($_COOKIE['CookieVisiteVirtuelle'])) {
	header('location:spip.php');
}
else {
	header('location:spip.php');  onLoad="Modalbox.show('prehome.php')"
}
?>


Bien entendu je sais que cela est faux, je voudrais donc savoir si quelqu'un saurait comment faire pour préciser le "onLoad" (présent dans le body de "sommaire.html") dans ma boucle conditionnelle.

Auriez vous une solution à mon problème svp ?

Désolé pour la longueur du post mais je tenais à bien expliquer chaque étape. Merci de m'avoir lu.
A voir également:

3 réponses

IpIpIpIpOne Messages postés 436 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 24 mai 2009 116
16 mars 2009 à 18:36
toutafay, ami Terrien !
1
Merci de votre réponse, maintenant le cookie se crée à l'ouverture de ma modalbox.
Il me reste un dernier soucis, lorsque j'arrive sur ma page d'accueil index.php :
<?php
if (isset($_COOKIE['CookieVisiteVirtuelle'])) {
	header('location:spip.php');
}
else {
	header('location:spip.php'); [Je voudrais préciser ici le onLoad de ma modalbox]
}
?>

je suis tout le temps redirigé vers spip.php, mais je souhaiterais ne pas déclencher la modalbox si le cookie existe.
Je rappelle que ma modalbox est appelée grâce à un onLoad dans le body de ma page sommaire.html.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
16 mars 2009 à 17:59
Bonjour,

Les cookies doivent être envoyés avant tout début d'affichage, c'est à dire qu'aucune donnée ne doit avoir été envoyé en sortie lors de l'appel à la fonction setcookie(), sinon, vous aurez droit à un message d'erreur de ce genre :
Hors toi dans ton script tu as avant setcookie le <DOCTYPE...

c'est pas bon !

il faut mettre <?php setcookie tout au début de ton script
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
17 mars 2009 à 12:59
<?php
if (isset($_COOKIE['CookieVisiteVirtuelle'])) {
	header('location:spip.php');
}
else {
	header('location:spip.php?modalbox=cequetuveux'); [Je voudrais préciser ici le onLoad de ma modalbox]
}
?>


et dans spip.php tu recupères par $modalbox=$_GET['modalbox']
0