11548 sujets

JavaScript, DOM et API Web HTML5

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.
Modifié par Sellas (19 Mar 2009 - 19:04)
Si j'ai bien tout compris de ton pb, il te suffirait simplement de tester la présence du cookie dans ta page spip.php et en fonction du résultat insérer ou pas ta modalbox..

En plus j'optimiserai la page en évitant ta première étape de redirection via le header + refresh...


<?php
if (isset($_COOKIE['CookieVisiteVirtuelle'])) {//si cookie
  echo "<body>";
} else {
  setcookie('CookieVisiteVirtuelle', '1', (time() + 3600*24), '/');
  echo "<body onLoad="Modalbox.show('prehome.php')">;
}
?>


Code à optimiser en fonction de ta structure (echo pas echo, template pas template, etc...). Mais l'idée est là. Smiley murf
Merci beaucoup pour ta réponse et ta rapidité Smiley ravi

Tu as bien compris mon problème, justement je ne sais pas comment procéder pour insérer ou non ma modalbox puisque le onLoad qui la déclenche se trouve dans le body de ma page html.
Je ne sais pas comment insérer ou traduire ce onload en PHP afin de le mettre dans ma boucle conditionnelle...

Si tu pouvais m'éclairer ou me guider se serait parfait ! Smiley biggrin
Sellas a écrit :
Merci beaucoup pour ta réponse et ta rapidité Smiley ravi

Tu as bien compris mon problème, justement je ne sais pas comment procéder pour insérer ou non ma modalbox puisque le onLoad qui la déclenche se trouve dans le body de ma page html.
Je ne sais pas comment insérer ou traduire ce onload en PHP afin de le mettre dans ma boucle conditionnelle...

Si tu pouvais m'éclairer ou me guider se serait parfait ! Smiley biggrin


Je ne connais que très peu le cms spip mais je pense qu'en consultant la doc technique disponible sur le site il doit être possible de trouver une méthodologie pour arriver à tes fins via son modèle d'écriture/programmation.
SPIP n'est pas le problème, on peut faire en SPIP tout ce qu'on ferait sans.
Il me suffit de trouver comment accéder au onLoad pour parvenir à mes fins...
merci quand même
Sellas a écrit :
SPIP n'est pas le problème, on peut faire en SPIP tout ce qu'on ferait sans.
Il me suffit de trouver comment accéder au onLoad pour parvenir à mes fins...
merci quand même


Qu'appelles-tu accéder au onload ?
Veux-tu intervenir au niveau d'un template/squelette et remplacer le onload à la volée à l'aide des marqueurs spip ? Au niveau d'un / de plusieurs scripts.
Veux-tu manipuler l'évènement onload ? Y affecter une fonction ?

Si tu peux faire tout ce que tu veux comme le laisse penser ton message je t'ai proposé une solution dans un post précédent qui ne consiste à écrire la gestion du onload qu'en cas de besoin.
Ton code ne fonctionne pas cela me dis qu'il y a une erreur à la ligne 7, soit à :
echo "<body onLoad="Modalbox.show('prehome.php')">";


Je souhaites que lorsque je vais sur ma page d'accueil, ma modalbox apparaisse. Lorsqu'elle apparaît, elle crée le cookie "CookieVisiteVirtuelle". Ensuite lorsque je reviens sur ma page d'accueil, je ne veux pas que la modalbox réapparaisse puisque le cookie est présent.

Pour ce faire je cherche donc à trouver comment activer/désactiver le onLoad de ma modalbox pour mettre dans ma condition quelque chose du genre :

<?php
if (isset($_COOKIE['CookieVisiteVirtuelle'])) {//si cookie
	//modalbox désactivée
}
else {
	//modalbox activée
}
?>
Quelle erreur est-ce ?

Sinon tu peux aussi utiliser une technique de ce genre : le passage de paramètre dans le header()


<?php
if (isset($_COOKIE['CookieVisiteVirtuelle'])) {
	header('location:spip.php');
}
else {
	header('location:spip.php[#red]?modalbox=1[/#]');
}
?>


et tester alors dans ta page spip.php l'existence du paramètre modalbox et dans ce cas ajouter l'évènement onload du body soit qq chose comme :

dans ta page spip.php

if (isset($_GET['modalbox']) && $_GET['modalbox']==1) {

  echo '<body onLoad="Modalbox.show(\'prehome.php\')">';

} else {

  echo '<body>';

}
Un grand merci à toi pour ton temps et tes réponses ! Cela à l'air de fonctionner, chapeau l'artiste Smiley cligne
Sellas a écrit :
Un grand merci à toi pour ton temps et tes réponses ! Cela à l'air de fonctionner, chapeau l'artiste Smiley cligne


Tu n'as plus qu'à passer le sujet de la file en résolu alors.
Smiley biggrin