Version complète: sur le forum Webmaster Hub : Script d'ouverture de pop up
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
nomasis
Hello @ tous,
pour un site en php, j'ai fait un javascript pour faire un pop up au chargement de la front page.
J'ai donc mis un OnLoad dans le body, mais, je n'y avais pas pensé, le script impacte tous les pages si bien que mon pop pup s'ouvre à chaque chargement de page.
Il y a t-il un moyen d'éviter cela d'après vous ?
En appelant ce javascript par un script php qui ne déclencherait QU'À l'ouverture de la page d'accueil.
Merci d'avance
Morgan_R
Bonjour,

tout simplement, avec un test du genre:

CODE
if($_SERVER['PHP_SELF']=='index.php') echo onLoad= ...


pour tester la page actuelle.
nomasis
CITATION(Morgan_R @ samedi 19 février 2005, 16h02)
Bonjour,

tout simplement, avec un test du genre:

CODE
if($_SERVER['PHP_SELF']=='index.php') echo onLoad= ...


pour tester la page actuelle.
*

euh oui...
sauf que je n'ai pas tout compris biggrin.gif
c'est ça tel que ?
CODE
<if($_SERVER['PHP_SELF']=='index.php') echo onLoad="Popup()">

que dois je changer d'autres ?
Morgan_R
Excuses moi, c'est vrai que j'ai été un peu expéditif blush.gif

$_SERVER est un tableau qui contient des informations relatives à la configuration du serveur. Tu as une liste des variables superglobales disponibles ici: tableaux superglobaux

$_SERVER['PHP_SELF'] contient donc l'url du script en train de s'éxécuter: si ta page d'accueil s'appelle index.php et qu'elle se trouve à la racine du serveur, cette variable contient donc 'index.php'.

if($_SERVER['PHP_SELF']=='index.php') -> Si ce test est vrai, alors tu te trouves sur cette page index.php, à la racine du serveur, et dans ce cas, echo onLoad="Popup()" inscrira cette commande ( onLoad="Popup() ) dans la page. Si tu es sur une autre page que index.php, cette commande ne figurera pas dans la page.

Penses bien aux balises php, cela donnes cela:
CODE
<?php if($_SERVER['PHP_SELF']=='index.php') echo onLoad="Popup()" ?>


J'espére avoir été plus clair. wink.gif
nomasis
oui tu as été très clair et je t'en remercie...
c'est ce que j'avais fait mais ça déclenchait une erreur alors je viens de recommencer en me disant que j'avais laisser une espace trainer
j'ai donc recopié texto ton code et c'est pareil.
Pige pas...
Morgan_R
Et c'est quoi, ce message d'erreur ?

Tu peux copier-coller tout le contenu de ta balise body aussi ?
nomasis
La balise avant :
CODE
<body class="page_bg" OnLoad="startPix();Popup()">

La balise après :
CODE
<body class="page_bg" OnLoad="startPix()">

l'erreur :
CODE
Parse error: parse error, unexpected '=', expecting ',' or ';' in /var/www/free.fr/0/2/justdigit/templates/rhuk_planetfall/index.php on line 52
Morgan_R
Oui, je viens de me rendre compte que j'avais oublié des trucs:

CODE
<?php if($_SERVER['PHP_SELF']=='index.php') echo 'onLoad="Popup()"' ?>


So on oublies les ' après la commande echo, ça ne peut pas marcher! IMSTP6.gif
nomasis
ah oui !
là ça plante plus...
mais le popup ne s'ouvre pas non plus.
Morgan_R
et la balise générée ressemble à quoi ?
nomasis
CITATION(Morgan_R @ samedi 19 février 2005, 17h50)
et la balise générée ressemble à quoi ?
*

ben elle est pas générée
Morgan_R
Mais tu peut être plus précis ? genre montrer ton code en php et le résultat obtenu ?

Qu'est-ce qui n'est pas généré ? Ta balise body est bien présente ? ou tu utilises php pour générer cette balise ?
nomasis
CITATION(Morgan_R @ samedi 19 février 2005, 17h54)
Mais tu peut être plus précis ? genre montrer ton code en php et le résultat obtenu ?

Qu'est-ce qui n'est pas généré ? Ta balise body est bien présente ? ou tu utilises php pour générer cette balise ?
*

non : le body est en dur dans la page... donc le body reste en l'état :
CODE
<?php if($_SERVER['PHP_SELF']=='index.php') echo 'onLoad="Popup()"' ?>
<meta http-equiv="Content-Type" content="text/html; <?php echo _ISO; ?>" />
<?php mosShowHead(); ?>
<link href="<?php echo $mosConfig_live_site;?>/templates/rhuk_planetfall/css/template_css.css" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" href="<?php echo $mosConfig_live_site;?>/images/favicon.ico" />
</head>
<body class="page_bg" OnLoad="startPix()">
Morgan_R
Ah ba je comprends mieux.

Le code que je t'ai filé est à inclure dans la balise body, voici ta balise compléte:

CITATION
<body class="page_bg" OnLoad="startPix();<?php if($_SERVER['PHP_SELF']=='index.php') echo 'Popup()' ?>">


et là, cela devrait être bon...
nomasis
sad.gif
toujours pas !
CODE
<body class="page_bg" OnLoad="startPix();">

le bout php n'est pas interprété.
Vincent
demande d'afficher :

echo "$_SERVER['PHP_SELF']";

pour voir si le test est le bon
nomasis
sur cette commande j'ai aussi une erreur d'interprétation :
CODE
<?php echo "$_SERVER['PHP_SELF']";?>

et manifestement en regardant le source de la page ce n'est toujours pas interprété :
CODE
<body class="page_bg" OnLoad="startPix();">
nomasis
qu'est ce que c'est énervant...
désolé les gars.
Je vais aller crouter un morceau, je repasserais plus tard.
Merci wink.gif
Morgan_R
Là, par contre, il ne faut mettre les ", pas pour afficher une variable :

CODE
<?php echo $_SERVER['PHP_SELF'];?>
nomasis
ça donne :

CITATION
/index.php
Morgan_R
ok, donc corriges le code de façon a obtenir ceci:

CODE
<body class="page_bg" OnLoad="startPix();<?php if($_SERVER['PHP_SELF']=='/index.php') echo 'Popup()' ?>">
Vincent
garanti sans erreur :
CODE
<?php echo $_SERVER['PHP_SELF'] ?>

cela ecrit quoi?
nomasis
ça donne que le popup se recharge quand même alors que je suis sur une autre page :
CODE
http://*****.free.fr/index.php?option=com_content&task=view&id=61&Itemid=1

(désolé je peux pas donner l'adresse du site)

d'ailleurs c'est curieux l'echo server donne toujours
CITATION
index.php]

alors que je me trouve sur une autre page...
Morgan_R
Essayes d'être précis quant au problème, stp : si je comprends bien ton dernier post, tu utilises des pseudo-frames, c'est à dire que tu n'as qu'une seule page dont le contenu est différent selon le contenu de ta querystring (ce qui se trouve après le ? dans l'url). dans ce cas, l'utilisation de $_SERVER['PHP_SELF'] ne suffit pas car cette valeur te renvoie seulement l'url de la page relative à la racine du serveur. dans ce cas, tu devrais essayer de concaténer à cette valeur le contenu de la querystring avec la variable $_SERVER[' QUERY_STRING '] , ce qui donne ceci:

<body class="page_bg" OnLoad="startPix();<?php if($_SERVER['PHP_SELF'].'?'.$_SERVER[' QUERY_STRING ']=='/index.php?option=com_content&task=view&id=61&Itemid=1') echo 'Popup()' ?>">

en supposant que la querystring que tu donnes dans ton dernier post corresponde à la page sur laquelle tu veux voir s'afficher ta popup, sinon, c'est à adapter ...

Pour vérifier que la valeur est la bonne, tu peux faire comme précedemment un script avec ceci:
<?php echo $_SERVER['PHP_SELF'].'?'.$_SERVER[' QUERY_STRING ']; ?>

Ou alors, je n'ai pas compris et il faut que tu donnes des infos supplémentaires... whistling.gif
bigornot
Ok

Alors fais :
CODE
<body class="page_bg" OnLoad="startPix();<?php if($_SERVER['PHP_SELF']=='/index.php') echo 'Popup()' ?>">
nomasis
CITATION(Morgan_R @ samedi 19 février 2005, 19h22)
Essayes d'être précis quant au problème, stp : si je comprends bien ton dernier post, tu utilises des pseudo-frames, c'est à dire que tu n'as qu'une seule page dont le contenu est différent selon le contenu de ta querystring (ce qui se trouve après le ? dans l'url). dans ce cas, l'utilisation de $_SERVER['PHP_SELF'] ne suffit pas car cette valeur te renvoie seulement l'url de la page relative à la racine du serveur. dans ce cas, tu devrais essayer de concaténer à cette valeur le contenu de la querystring avec la variable $_SERVER[' QUERY_STRING '] , ce qui donne ceci:

<body class="page_bg" OnLoad="startPix();<?php if($_SERVER['PHP_SELF'].'?'.$_SERVER[' QUERY_STRING ']=='/index.php?option=com_content&task=view&id=61&Itemid=1') echo 'Popup()' ?>">
en supposant que la querystring que tu donnes dans ton dernier post corresponde à la page sur laquelle tu veux voir s'afficher ta popup, sinon, c'est à adapter ...

Pour vérifier que la valeur est la bonne, tu peux faire comme précedemment un script avec ceci:
<?php echo $_SERVER['PHP_SELF'].'?'.$_SERVER[' QUERY_STRING ']; ?>
/index.php?
Ou alors, je n'ai pas compris et il faut que tu donnes des infos supplémentaires...  whistling.gif
*

j'utilise un CMS, Mambo (sous Apache/MySQL)
donc il y a un index.php et selon les liens ils chargent les éléments de la base de données...
J'ai essayé l'echo serveur avec ton nouveau bout de code, ce qui donne la même chose :
CITATION
/index.php?

Que pourrais-je te dire d'autre ?
nomasis
CITATION(bigornot @ samedi 19 février 2005, 19h34)
Ok

Alors fais :
CODE
<body class="page_bg" OnLoad="startPix();<?php if($_SERVER['PHP_SELF']=='/index.php') echo 'Popup()' ?>">


euh... c'est quoi la différence bigornot rolleyes.gif
bigornot
la différence, c'est le / devant index.php tongue.gif mais j'avais oublié de lire un post tongue.gif


moi, je te conseille ça :
CODE
if((isset($_GET['option']))&&(isset($_GET['task'])){
//ça veut dire que tu es sur //index.php?option=com_content&task=view&id=61&Itemid=1
//donc, fais en conséquence (ou ça veut dire que option et task sont
//initialisés
}
else
{
//mets ta pop-up
}
nomasis
bon eh bien je regarderais ça demain parce qu'on va pas passer la soirée dessus non plus, hein ? wink.gif
Anonymus
En fait, quand tu fais $_SERVER['PHP_SELF'], tu tombes toujours sur index.php, parce que toutes les pages passent par index.php.
Ce que tu voudrais, c'est que ca n'ouvre ton pop up 'que' si l'on est sur la page d'accueil, et seulement sur celle ci.
Donc, il faut que tu testes le $_SERVER['PHP_SELF'], mais aussi la chaine de requetes, autrement dit, ce qu'il y a après le point d'interrogation.
S'il y a qqch après le point d'interrogation, alors ce n'est plus la première page. Sinon, c'est la première page. Ca se traduit ainsi :

if ($_SERVER['PHP_SELF']=='/index.php' && $_SERVER['QUERY_STRING']=='')
... suite du code.

Nico.
Commmint
Tu peux gagner quelques caractères en utilisant directement $PHP_SELF.

Il faut aussi tester si la page est accédée en /index.php ou par la racine du site. Si un lien pointe vers

http://toto.com

ce n'est pas égal à

http://toto.com/index.php

le pop up risque de pas s'ouvrir une fois sur deux. Il faut harmoniser l'accès à la page index. de manière à ce que $PHP_SELF soit toujours égal à / ou à index.php

edit : hum chui à la rue moi, j'avais pas vu la seconde page du post. C'est dimanche je retourne me coucher d_clap_20.gif
nomasis
CITATION(Anonymus @ samedi 19 février 2005, 23h58)
En fait, quand tu fais $_SERVER['PHP_SELF'], tu tombes toujours sur index.php, parce que toutes les pages passent par index.php.
Ce que tu voudrais, c'est que ca n'ouvre ton pop up 'que' si l'on est sur la page d'accueil, et seulement sur celle ci.
Donc, il faut que tu testes le $_SERVER['PHP_SELF'], mais aussi la chaine de requetes, autrement dit, ce qu'il y a après le point d'interrogation.
S'il y a qqch après le point d'interrogation, alors ce n'est plus la première page. Sinon, c'est la première page. Ca se traduit ainsi :

if ($_SERVER['PHP_SELF']=='/index.php' && $_SERVER['QUERY_STRING']=='')
... suite du code.

Nico.
*

BINGO !


Merci, un très grand merci à tous !
Vous me tirez une sacrée épine du pied...

Question subsidiaire : si on revient sur la page d'accueil le popup est rechargé.
Comment pourrait on l'éviter ? Par un cookie ?
nomasis
CITATION(nomasis @ dimanche 20 février 2005, 11h30)
Question subsidiaire : si on revient sur la page d'accueil le popup est rechargé.
Comment pourrait on l'éviter ? Par un cookie ?
*

smile.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.