Bouton de pause messages

JohnSteven
Invité n'ayant pas de compte PHPfrance

20 janv. 2011, 22:00

Bonjour,

J'ai fait un systeme de messages pour une webradio. En effet, l'auditeur envoie un message à partir du site et moi je le recois sur une page web accessible seulement par moi.

Le problème c'est que j'ai besoin d'un bouton pour mettre en pause le défilement des messages parce que j'en recois tellement que je n'arrive pas à lire.

Est-ce possible à faire ? :)

Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 janv. 2011, 22:16

salut,

surement, cela dépend de comment c'est fait.

si cela change sans intervention de ta part ça doit être du JS, du flash ?

sans code et plus d'info on ne peut t'aider.

@+
Il en faut peu pour être heureux ......

JohnSteven
Invité n'ayant pas de compte PHPfrance

20 janv. 2011, 22:26

Salut,

C'est du JS , je peux te filer le systeme par message privé si besoin. C'est en effet une shoutbox sauf que les messages arrivent sur une page différente.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 janv. 2011, 23:26

oula je suis pas assez calé en JS pour cela.

mais sur le principe tu a une fonction qui va chercher les infos en continue, il faut ajouter un paramètre qui s'il est validé "arrete" le poling, donc arrête la fonction. en gros

Code : Tout sélectionner

function polling( stop=false) { if (stop == false) { // contenu de la fonction d'origine } else { // rien }
@+
Il en faut peu pour être heureux ......

JohnSteven
Invité n'ayant pas de compte PHPfrance

21 janv. 2011, 22:25

C'est ca la fonction:
function refreshShouts() {
	var refreshRate = 1000; // time in milliseconds
	var cacheBuster = (new Date).getTime();
	$.ajax({
	   	type: "POST",
	   	dataType: "xml",
	   	url: "php/getShouts.php",
	   	data: {op: 'tick', time: cacheBuster},
	   	error: function() { $('#shoutStatus').empty().addClass('shoutError').html('An error occured! Try again.'); },
	   	success: function(xml){
	   		if($('shout', xml).size() > 0) {
				$('#shoutStatus').empty().removeClass().addClass('shoutStatus').html('Showing shouts.');
		   		$('shout', xml).each(function(id){
		   			var nickname = $('nickname', this).text();
		   			var ville = $('ville', this).text();
		   			var gsm = $('gsm', this).text();
		   			var message = $('message', this).text();
		   			var date = $('date', this).text();
		   			var cssClass = 'shoutRow1';
		   			if((id%2)/10 == 0)
		   				cssClass = 'shoutRow';
		   			var shoutRow = '<div id="'+cssClass+'"><span id="gsm">'+gsm+' | </span><span id="nickname">'+nickname+' <span id="ville">| '+ville+':</th></tr> </span><span id="shoutedMessage">'+message+'</span><br /> <span id="date">('+date+')</span></div>';
		   			if(id == 0)
		   				$('#shoutsContainer').empty().removeClass().addClass('shouts').html(shoutRow);
		   			else
		   				$('#shoutsContainer').removeClass().addClass('shouts').append(shoutRow);
		   		});
	   		} else {
	   			$('#shoutStatus').empty().addClass('shoutError').html($('error', xml).text());
	   			$('#shoutsContainer').empty().removeClass().addClass('noShouts').html('Shouts will be displayed here!');
	   		}
	   	}
	});
	setTimeout('refreshShouts()', refreshRate);
}
Donc j'ai besoin de qqchose qui l'arrete ?

JohnSteven
Invité n'ayant pas de compte PHPfrance

22 janv. 2011, 19:40

Personne ? :cry:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 janv. 2011, 20:22

L'idée, c'est tout simplement de ne pas exécuter le code de la fonction lorsque tu a cliqué sur pause. Il y a de nombreuses façon de le faire... tu peux par exemple tester si une case est cochée : si oui tu es en pause donc pas d'exécution, sinon, tu n'es pas en pause et il exécute le code :

Code : Tout sélectionner

function refreshShouts() { var refreshRate = 1000; // time in milliseconds var cacheBuster = (new Date).getTime(); if (!document.getElementById('idDeMaCaseACocher').checked) { // ajout du test : si la case n'est pas cochée $.ajax({ ... }); } // fin du test // on garde le prochain rappel de la fonction en dehors du test setTimeout('refreshShouts()', refreshRate); }
Et dans ton code html, il te suffit juste d'ajouter :
<input type="checkbox" id="idDeMaCaseACocher" /> <label for="idDeMaCaseACocher">Pause</label>
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

JohnSteven
Invité n'ayant pas de compte PHPfrance

22 janv. 2011, 20:42

Le probleme maintenant c'est que je n'arrive plus du tout à envoyer des messages :(

JohnSteven
Invité n'ayant pas de compte PHPfrance

22 janv. 2011, 21:16

Ce ne serait pas mieux de mettre en pause l'execution du javascript "code.js" sur la page ou je recois les sms ?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr-FR" lang="en-US" dir="ltr">
	<head>
		<title>Guillaume Radio Libre | SMS</title>
		<link rel="stylesheet" type="text/css" href="style/style.css">
		<meta name="Title" content="Guillaume Radio Libre">
		<meta name="Distribution" content="free">
		<meta name="Robots" content="All">
		<meta name="verify-v1" content="r/NImAjDz0HRiUAolYgw6ctQfuyYPuRHvhpSgyiYDnA=" />
		<script src="js/jquery.js" type="text/javascript" language="javascript"></script>
		<script src="js/code.js" type="text/javascript" language="javascript"></script>
</head>
<body>
	<div id="content">
		<div id="header">
						<input type="checkbox" id="idDeMaCaseACocher" /> <label for="idDeMaCaseACocher">Pause</label>
						<div class="shouts" id="shoutsContainer"></div>			
					</div>
				</td>
			</tr>
		</table>
			<p id="footer">&copy; 2011 JohnSteven. All rights reserved.</p>
	</div>
</body>
</html>
Donc le meme checkbox mais qui annule le <script src="js/code.js" type="text/javascript" language="javascript"></script>

JohnSteven
Invité n'ayant pas de compte PHPfrance

22 janv. 2011, 22:37

Ah non, j'ai reussi !!

J'ai du mettre le code html sur la page d'envoi aussi.

Merci Ryle =D> :wink:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 janv. 2011, 11:43

Effectivement, si le même code est utilisé côté utilisateur, il va bloquer si la case n'est pas présente... mais si tu ne veux pas proposer de bouton "pause" à tes visiteurs, il te suffit juste de modifier le test :
if (!document.getElementById('idDeMaCaseACocher') || !document.getElementById('idDeMaCaseACocher').checked)
on test ainsi la présence de la cas en plus du fait qu'elle soit cochée. Si la case n'existe pas (côté utilisateur), ou qu'elle n'est pas cochée (côté chez toi), on exécute le rafraîchissement :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

JohnSteven
Invité n'ayant pas de compte PHPfrance

23 janv. 2011, 12:06

Sinon, c'est possible de faire un bouton qui supprime tous les messages de la base données ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 janv. 2011, 18:11

Oui c'est possible


Il faut une requete delete en reponse au formulaire (meme chose en ajax).

@+
Il en faut peu pour être heureux ......