Ouvrir popup en boucle

Résolu
zlatan40 Messages postés 42 Date d'inscription dimanche 20 février 2011 Statut Membre Dernière intervention 1 avril 2018 - 20 sept. 2009 à 17:46
zlatan40 Messages postés 42 Date d'inscription dimanche 20 février 2011 Statut Membre Dernière intervention 1 avril 2018 - 22 sept. 2009 à 21:51
Bonjour
Je réalise un petit script qui ouvre une popups pour chaque lien se situant dans un fichier texte. J'ai réalisé ce code mais seul le dernier lien de la liste s'ouvre en popup lorsque j'éxécute le script.
Comment puis-je faire ?
Merci de d'avance !
<SCRIPT type="text/javascript">
function ouvre_popup(page) {
window.open(page,"nom_popup","menubar=no, status=no, scrollbars=no, menubar=no");
}
</SCRIPT>
<?php
$monfichier = fopen('liste.txt', 'r+');

echo '<script type="text/javascript">';
while($lien = fgets($monfichier))
{
$lien = substr($lien, 0, 37);
echo 'ouvre_popup("'.$lien.'");';
}
echo '</script>';

fclose($monfichier);
?>

9 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
20 sept. 2009 à 20:39
Salut,

Je pense plutôt que tes liens s'ouvrent correctement, le problème est qu'ils le sont dans une même fenêtre (qui s'appelle ici nom_popup)
Si tu veux ouvrir chaque lien ds une fenêtre différente il faut la nommer différemment.
Soit tu passes un second argument à ta fonction pour le nom de la fenêtre, soit tu gères ça à l'intérieur de ta fonction. Tout dépends le but en fait (si tu veux contrôler la fenêtre une fois ouverte par exemple)

Cordialement,


Kohntark -
3
DarkM60 Messages postés 37 Date d'inscription dimanche 15 mai 2005 Statut Membre Dernière intervention 21 septembre 2009
20 sept. 2009 à 19:30
Déjà rajoute à la fin de ton echo 'ouvre_popup("'.$lien.'");'; un petit \n pour avoir un retour à la ligne (echo 'ouvre_popup("'.$lien.'");',"\n";)

Si ma mémoire est bonne en fait... Fgets récupère aussi le saut de ligne à la fin de chaque ligne dans ton fichier.

Donc pour chaque lien il prend le lien ET le saut de ligne. Mais pas pour le dernier. Donc seul le dernier est bon.

Essaye ça pour voir :

while($lien = fgets($monfichier))
{
$lien = substr($lien, 0, 37);
$lien = str_replace("\n","",$lien);
echo 'ouvre_popup("'.$lien.'");';
}


(Et le substr sert à quoi ? Et pense à indenter ton code :p)
0
zlatan40 Messages postés 42 Date d'inscription dimanche 20 février 2011 Statut Membre Dernière intervention 1 avril 2018
20 sept. 2009 à 19:52
merci pour ta réponse mais le problème ne vient pas de là, en fait le substr réglait déjà le problème du \n car tout mes liens font 37 caractères.
Mais je vais quand même prendre ta solution.
Donc le problème n'est pas réglé, je n'est toujours que le dernier lien qui se lance.
0
DarkM60 Messages postés 37 Date d'inscription dimanche 15 mai 2005 Statut Membre Dernière intervention 21 septembre 2009
20 sept. 2009 à 21:23
Oh, je n'avais pas fait attention au nom du popup ! Bien vu Kohntark !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
zlatan40 Messages postés 42 Date d'inscription dimanche 20 février 2011 Statut Membre Dernière intervention 1 avril 2018
20 sept. 2009 à 21:32
Merci Kohntark !
C'était bien cela, j'ai rajouté un argument à la fonction et le tour est joué.
Cependant j'ai un nouveau soucis, je voudrais en ouvrir 1 toute les 10 sec par exemple. J'utilise pour cela la fonction time() mais rien ne s'ouvre avec ce code :

<script type="text/javascript">
function ouvre_popup(page,nom_popup)
{
    window.open(page,nom_popup,"menubar=no, status=no, scrollbars=no, menubar=no");
}

<?php
$temps = time();
$monfichier = file('liste.txt');
foreach($monfichier as $lien)
{
   while(time()-$temps <= 10)
   {
$temps = time();
$lien = str_replace("\n","",$lien);
echo "\n".'ouvre_popup("'.$lien.'","'.$lien.'");';
}
}
?>
</script>
0
zlatan40 Messages postés 42 Date d'inscription dimanche 20 février 2011 Statut Membre Dernière intervention 1 avril 2018
21 sept. 2009 à 11:33
up
0
DarkM60 Messages postés 37 Date d'inscription dimanche 15 mai 2005 Statut Membre Dernière intervention 21 septembre 2009
21 sept. 2009 à 15:09
Tu dois bien comprendre que PHP est éxécuté côté SERVEUR et que javascript est exécuté côté CLIENT.

En gros, ton time() ne te sert à rien ici, il va juste faire "attendre" le serveur, mais les popups seront tous affichés en même temps.

Si tu veux vraiment faire une attente entre les popups il faut utiliser les fonctions d'attente en javascript (Renseigne toi sur setTimeout, ça créé une minuterie)


Tu pourrais tenter quelque chose comme ça :

<script type="text/javascript">
function ouvre_popup(page,nom_popup)
{
    window.open(page,nom_popup,"menubar=no, status=no, scrollbars=no, menubar=no");
}

<?php
$i = 0;
$monfichier = file('liste.txt');
foreach($monfichier as $lien)
{
$milisecondes = ($i * 10000);
$lien = str_replace("\n","",$lien);
echo "\n".'setTimeout("ouvre_popup()",'.$milisecondes.',"'.$lien.'","'.$lien.'");';
$i++;
}
?>

</script>


Dis moi ce que ça donne, je n'ai pas testé, mais l'idée c'est d'utiliser setTimeout.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
21 sept. 2009 à 18:03
ton time() ne te sert à rien ici, il va juste faire "attendre" le serveur

Heu, non, il ne va rien faire attendre du coup. time() retourne un timestamp unix, rien d'autre. Il aurait fallu utiliser sleep, mais c'est une mauvaise idée.

Je ne connais pas le contexte mais il y a de fortes chances que ces ouvertures de popups soient également une mauvaise idée :
- tu vas faire fuir tes visiteurs avec des popups non sollicitées
- tel que tu procèdes n'importe quel anti popup va les bloquer


Cordialement,


Kohntark -
0
zlatan40 Messages postés 42 Date d'inscription dimanche 20 février 2011 Statut Membre Dernière intervention 1 avril 2018
22 sept. 2009 à 21:51
Merci pour vos réponses, j'ai trouvé en fait c'est en JS avec settimeout() que cela fonctionne.
Pour info ce script n'a pas pour but de diffuser des pubs donc cela ne fera pas fuir les visiteurs :)
Je souhaiterai maintenant fermer la popup qui est ouverte avant d'en réouvrir une nouvelle. J'ai essayer avec le nom de la popup mais ce n'est pas bon.
$temps = 0;
$i = 0;
$monfichier = file('liste.txt');
foreach($monfichier as $lien)
{
$i++;
$lien = trim($lien);
echo "\n".'setTimeout(\'ouvre_popup("'.$lien.'","fenetre'.$i.'");\','.$temps.');'."\n";    
        $temps+=10000;
        echo 'fenetre'.$i.'.close();';	
}
0
Rejoignez-nous