Venez baraguiner avec la communauté !
Vous n'êtes pas identifié.
Salut,
je suis à la recherche d'un chat ajax très simple, très léger, et très peu gourmand en ressources
auriez vous des idées à me soumettre ?
merci d'avance !
++
Hors ligne
le plus simple, si tu souhaites quelque chose de "dépouillé" en fonctionnalités serait de le faire toi même, cela revient à actualiser ta fenêtre toutes les x secondes, rien de compliqué, et il me semble d'ailleurs qu'il y a eu une news ici même il y a une semaine ou deux sur un truc qui fait ça simplement. J'en avais développé un très rapidement pour un site client, d'ailleurs je ne m'étais pas embarrassé du superflu, pas de salon privé, juste un espace public, et pas de base de données, que du fichier texte pour les messages, ça te permet d'écrire directement dans le fichier texte "machin dit > bla bla" en une passe. Te reste un pseudo système de login où le type donne son nom dans un input et tu le stockes en session ou dans un cookie (j'avais fait la version session pour éviter les problèmes sur des ordis publics).
au final, il te faut :
- un champ texte pour le pseudo avec un ajax derrière pour le passer en session
- un grand textarea pour le contenu du chat
- un input pour le message du gars avec un bouton "envoi"
- une action en ajax sur l'envoi pour mettre a jour le fichier texte et actualiser le textarea
- un js pour l'actualisation en settimeout
par contre ici point de smileys, perso j'avais éliminé cette possibilité car cela fait stocker des smileys en version ponctuation dans le fichier texte et ensuite il faut les retransformer à chaque actualisation d'une part, et d'autre part dans un textarea ça chie, il faut passer par un div.
après tu as des chats tout faits, mais pour l'intérêt du truc, faut faire simple, et surtout pas gourmand en ressources.
si tu as besoin d'aide n'hésites pas à reposter.
a+
Hors ligne
oui c'est exactement ça !
juste un fichier texte sans BDD c'est parfait
J'essaye d'utiliser celui-ci
http://www.linuxuser.at/chat/index.html
Mais je rencontre des problèmes avec les accents sous IE7 et des bug d'affichage sous firefox !
(ce qui m'étonne d'ailleurs, enfin bref...)
J'aime beaucoup celui là
http://www.vengava.com/ajax/chat/
car il propose en +
- autoscroll vers le bas
- affichage de l'heure des message
Mais je n'arrive pas à rentrer en contact avec l'auteur pour pouvoir l'utiliser...
je bloque un peu
si tu as une proposition je suis preneur 
++
Hors ligne
Hum tu devrais le créer toi même, sachant qu'il faut juste écrire dans un fichier texte.
Puis interroger périodiquement le fichier afin de récupérer les dernières données ^^
Par exemple avec ce plugin :p http://www.lafermeduweb.net/billet/smar … -1021.html
Sinon tu peux aller voir de ce côté: http://www.lafermeduweb.net/s/chat ^^
Hors ligne
pour les accents, il te faut absolument passer tout en entités (htmlentities), sinon tu auras des soucis 
le second est pas mal mais pas de session pour le nom de l'utilisateur donc je trouve ça un peu bidon, c'est 4 lignes de code...
pour la propal, je sais pas, qu'attends tu de moi ?
te sortir celui que j'avais fait c'est pas super jouable, il est intégré dans un site existant, mais si tu commences et que tu postes ici, je t'aide sans problème 
si c'est sur l'ajax que tu bloques, je peux te faire tes bouts de script pour la session, connexion et déconnexion.
idem pour le stockage du message dans le fichier texte.
aucun problème, avec plaisir.
Hors ligne
Sybio a écrit:
Hum tu devrais le créer toi même, sachant qu'il faut juste écrire dans un fichier texte.
Puis interroger périodiquement le fichier afin de récupérer les dernières données ^^
Par exemple avec ce plugin :p http://www.lafermeduweb.net/billet/smar … -1021.html
Sinon tu peux aller voir de ce côté: http://www.lafermeduweb.net/s/chat ^^
oui enfin les chats que tu proposes sont un peu trop complexes je trouve pour une utilisation simpliste et en tout cas en ce qui me concerne beaucoup trop gadget (les goûts et les couleurs...) 
par contre c'est clair que créer une appli de chat est un très bon apprentissage, c'est simple et en terme d'optimisation des ressources, cela permet tout de même de ratisser large.
Hors ligne
dans le code suivant je ne comprend pas la ligne var url = "actualizar.web"; (ligne 13)
C'est quoi actualizar.web ??
Merci pour votre aide
++
<!--
ajax = new AJAX();
var txtUsr = document.getElementById("usr");
var txtMsj = document.getElementById("msj");
var ent = document.getElementById("entrada");
var autodesp = document.getElementById("autodesplazar");
var ps = document.getElementById("pais");
var params = null;
var refresco = 2000;
var intervalo = null;
var cnt = 0;
var enviar = false;
var url = "actualizar.web";
function enviarMensaje() {
if ((txtUsr.value == '') || (txtMsj.value == '')) {
alert('un des champs est vide !');
} else {
ajax.abort();
ajax= null;
ajax = new AJAX();
enviar = true;
actualizar();
}
return false;
}
function actualizar() {
if (enviar == true) {
enviar = false;
params = "usr=" + txtUsr.value + "&ps=" + ps.value + "&msj=" + txtMsj.value + "&cnt=" + cnt;
txtMsj.value="";
txtMsj.focus();
} else {
params = "usr=sistema&msj=&cnt=" + cnt;
}
ajax.open("POST",url,true);
ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded; charset=utf-8");
ajax.onreadystatechange = function() {
if (ajax.readyState == 4) {
try {
if (ajax.status == 200) {
var datos = ajax.responseText;
if (datos.length != 2) {
if(datos != "") {
var dt = eval(datos);
cnt += dt.length;
for (var i=0; i<dt.length; i++) {
ent.innerHTML += "<div class='entradas'><b>" + dt[i][1] + "</b> " + dt[i][0] + "<br />" + dt[i][3] + "</div>";
}
if (autodesp.checked == true) ent.scrollTop = ent.clientHeight + ent.scrollHeight;
}
}
}
} catch(e) {}
intervalo = setTimeout(actualizar,refresco);
}
}
ajax.send(params);
clearTimeout(intervalo);
}
window.onload = function() {
inicioscrollchat = setTimeout(inicioscrollchat,1000);
}
function inicioscrollchat() {
ent.scrollTop = ent.clientHeight + ent.scrollHeight;
clearTimeout(inicioscrollchat);
txtUsr.focus();
}
actualizar();
//-->Dernière modification par billboc (25/01/2011 22:56:03)
Hors ligne
salut,
je pense que c'est le fichier texte ou sont stockes les commentaires, ils le nomment .web pour ne pas que celui ci soit accessible en modifiant le type mime via htaccess, enfin c'est ce que je pense a la vue de ton bout d script 
sinon tu as celui ci qui est bien documente, et pas trop moche. perso je virerais la couche mysql pour la gérer en fichier, ou alors encore une évolution possible, passer sur mongodb qui au final est un mix des deux 
http://yensdesign.com/2009/01/create-a- … ax-jquery/
Hors ligne
codegrabber a écrit:
salut,
je pense que c'est le fichier texte ou sont stockes les commentaires, ils le nomment .web pour ne pas que celui ci soit accessible en modifiant le type mime via htaccess, enfin c'est ce que je pense a la vue de ton bout d script
oui tu as raison ça doit être ça !
comment puis je modifier ce VAR URL pour faire le lien à mon fichier texte (chat.txt) ? (je ne connais pas la syntaxe précise...)
codegrabber a écrit:
sinon tu as celui ci qui est bien documente, et pas trop moche. perso je virerais la couche mysql pour la gérer en fichier, ou alors encore une évolution possible, passer sur mongodb qui au final est un mix des deux
http://yensdesign.com/2009/01/create-a- … ax-jquery/
oui il est beau celui là
il va falloir que je travaille dessus ! merci !
par contre j'espere qu'il restera compatible avec mes autres plugin jquery de mon blog
(jai testé certain plugin wordpress comme lightchat qui mettais la pagaille lors des chargement de jquery)
Merci pour tous tes éclaircissements vraiment super utiles !!!
Bonne journée
++
Hors ligne
salut,
pour ta 1ere question, cela devrait régler ton problème :
var url = "chat.txt";
par contre, fais en sorte que ce fichier ne soit pas indexé par les moteurs 
tu peux simplement changer les droits de ton fichier pour qu'il ne soit accessible que par le serveur avec un chmod directement sur le fichier. si tu n'es pas sur dédié et que tu es en mutu, tu devrais pouvoir le faire avec un chmod php ou un umask, à tester...
sinon pour le fichier texte, une évolution sympa pourrait être, dans l'optique où tu souhaites "coloriser" la sortie, de ne pas utiliser un fichier texte mais plutôt un fichier xml, cela revient au même mais cela te permet au parsing d'associer plus facilement un style.
l'avantage du fichier texte simple est que si tu es sûr de ton coup pour la présentation alors tu peux insérer directement dedans du html, avec par exemple une couleur pour le nom du posteur, une pour la date / heure du post et une autre encore pour le message. par contre le jour où tu veux changer les couleurs il te faut vider ton historique...
autre méthode, séparer ce que tu stockes, genre : nom|||dateheure|||message
à l'affichage, tu splittes ta ligne via un explode et tu colorises chaque partie de l'array retourné.
en xml, c'est plus simple, tu vas utiliser simpleXML pour lire, donc tu vas récupérer des noeuds, et de fait tu styles les noeuds, donc pas besoin de vider ton histo si tu changes ta présentation.
pour la seconde partie de ton post, si tu codes ton propre chat tu n'auras pas de problème avec WP, c'est du maison, il faut juste que tu définisses bien tes variables en local pour tes fonctions et aucune variable globale ou alors avec des noms de furieux 
Bon courage.
PS : penses aussi à une chose... si tu pars sur de la version fichier texte, que ce soit du xml ou du txt, il faut au bout d'un moment vider le fichier sinon il va indéfiniment grossir et ton actualisation sera très lente au bout d'un moment, penses y 
Hors ligne
bon je vais essayer d'utiliser tout ça... je te tiens au courant 
Hors ligne
re-bonjour !
Alors voici ou j'en suis
j'ai un chat très simple (utilisant un fichier txt) qui affiche uniquement
- la fenêtre du chat
- un input pour laisser le message
(le nom de l'auteur étant auto = celui du connecté au blog)
par contre je rencontre un problème
- les accents ne passent pas avec internet explorer (safari firefox chrome = ok)
Et voici les fonctions que je n'arrive pas à incorporer
- autoscroll sur le dernier message
- afficher l'heure de chaque message
- effacer le fichier.txt tous les 24h (à 6h du mat)
Je te donne le javascript que j'ai modifié, si tu peux m'aider je t'en remercie 
<script type="text/javascript">
/****************************************************************
* Most Simple Ajax Chat Script (www.linuxuser.at) *
* Version: 3.1 *
* *
* Author: Chris (chris[at]linuxuser.at) *
* Contributors: Derek, BlueScreenJunky (http://forums.linuxuser.at/viewtopic.php?f=6&t=17)
* *
* Licence: GPLv2 *
****************************************************************/
/* Settings you might want to define */
var waittime=800;
/* Internal Variables & Stuff */
document.getElementById("chatmsg");
/*chatmsg.focus()*/
document.getElementById("chatwindow").innerHTML = "chargement...";
var xmlhttp = false;
var xmlhttp2 = false;
/* Request for Reading the Chat Content */
function ajax_read(url) {
if(window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
if(xmlhttp.overrideMimeType){
xmlhttp.overrideMimeType('text/xml');
}
} else if(window.ActiveXObject){
try{
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
} catch(e){
}
}
}
if(!xmlhttp) {
alert('Giving up :( Cannot create an XMLHTTP instance');
return false;
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState==4) {
document.getElementById("chatwindow").innerHTML = xmlhttp.responseText;
zeit = new Date();
ms = (zeit.getHours() * 24 * 60 * 1000) + (zeit.getMinutes() * 60 * 1000) + (zeit.getSeconds() * 1000) + zeit.getMilliseconds();
intUpdate = setTimeout("ajax_read('chat.txt?x=" + ms + "')", waittime)
}
}
xmlhttp.open('GET',url,true);
xmlhttp.send(null);
}
/* Request for Writing the Message */
function ajax_write(url){
if(window.XMLHttpRequest){
xmlhttp2=new XMLHttpRequest();
if(xmlhttp2.overrideMimeType){
xmlhttp2.overrideMimeType('text/xml');
}
} else if(window.ActiveXObject){
try{
xmlhttp2=new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try{
xmlhttp2=new ActiveXObject("Microsoft.XMLHTTP");
} catch(e){
}
}
}
if(!xmlhttp2) {
alert('Giving up :( Cannot create an XMLHTTP instance');
return false;
}
xmlhttp2.open('GET',url,true);
xmlhttp2.send(null);
}
/* Submit the Message */
function submit_msg(){
nick = document.getElementById("chatnick").value;
msg = document.getElementById("chatmsg").value;
if (nick == "") {
check = prompt("please enter username:");
if (check === null) return 0;
if (check == "") check = "anonymous";
document.getElementById("chatnick").value = check;
nick = check;
}
document.getElementById("chatmsg").value = "";
ajax_write("chat.php?m=" + msg + "&n=" + nick);
}
/* Check if Enter is pressed */
function keyup(arg1) {
if (arg1 == 13) submit_msg();
}
/* Start the Requests! ;) */
var intUpdate = setTimeout("ajax_read('chat.txt')", waittime);
</script>Dernière modification par billboc (29/01/2011 15:46:38)
Hors ligne
alors pour le autoscroll vers le bas , j'ai placé en ligne 19 le code suivant
element = document.getElementById('chatwindow');
element.scrollTop = element.scrollHeight;ça marche mais est-ce que c'est "propre " ?
merci pour tes lumières 
++
Hors ligne
ce matin ça ne marche plus ! j'ai du m'emmêler les pinceaux hier ...
bon je continue à chercher
merci pour votre aide
++
Hors ligne
si ça peut aider je rajoute le fichier php qui va avec...
<?php
/* author: chris at linuxuser.at
licence: GPLv2
*/
$fn = "chat.txt";
$maxlines = 10;
/* Set this to a minimum wait time between posts (in sec) */
$waittime_sec = 0;
/* spam keywords */
$spam[] = "nigger";
$spam[] = "cum";
/* IP's to block */
$blockip[] = "12.34.567.89";
/* spam, if message IS exactly that string */
$espam[] = "ajax";
/* Get Message & Nick from the Request and Escape them */
$msg = $_REQUEST["m"];
$msg = htmlspecialchars(stripslashes($msg));
$n = $_REQUEST["n"];
$n = htmlspecialchars(stripslashes($n));
if ($msg != "") {
foreach ($blockip as $a) {
if ($_SERVER["REMOTE_ADDR"] == $a) { die(); }
}
$mystring = strtoupper($msg);
foreach ($spam as $a) {
if (strpos($mystring, strtoupper($a)) === false) {
/* Everything Ok Here */
} else {
die();
}
}
foreach ($espam as $a) {
if (strtoupper($msg) == strtoupper($a)) { die(); }
}
$handle = fopen ($fn, 'r');
$chattext = fread($handle, filesize($fn)); fclose($handle);
$arr1 = explode("\n", $chattext);
if (count($arr1) > $maxlines) {
/* Pruning */
$arr1 = array_reverse($arr1);
for ($i=0; $i<$maxlines; $i++) { $arr2[$i] = $arr1[$i]; }
$arr2 = array_reverse($arr2);
} else {
$arr2 = $arr1;
}
$chattext = implode("\n", $arr2);
if (substr_count($chattext, $msg) > 2) { die(); }
$out = $chattext . "<strong>" . $n . "</strong>" . ": " . $msg . "<br>\n";
$out = str_replace("\'", "'", $out);
$out = str_replace("\\\"", "\"", $out);
$handle = fopen ($fn, 'w'); fwrite ($handle, $out); fclose($handle);
}
?>Hors ligne
billboc a écrit:
alors pour le autoscroll vers le bas , j'ai placé en ligne 19 le code suivant
Code:
element = document.getElementById('chatwindow'); element.scrollTop = element.scrollHeight;ça marche mais est-ce que c'est "propre " ?
merci pour tes lumières
++
salut,
alors si ça marche c'est déjà l'essentiel 
après, est ce que c'est propre, pour moi oui puisque tu joues direct sur le dom, après il faut vérifier que cela fonctionne sur tous les navigateurs comme espéré, mais je ne pense pas qu'il y ait de souci.
par contre pour le code au dessus, les request font un peu vieillot, ne peux tu pas utiliser les fonctions ajax de jquery pour te simplifier la tâche ?
Hors ligne
billboc a écrit:
ce matin ça ne marche plus ! j'ai du m'emmêler les pinceaux hier ...
bon je continue à chercher
merci pour votre aide
++
qu'est ce qui ne marche plus ?
dans un premier temps il te faut isoler le bug, si tu développes en local, tu peux avoir accès à ton error log, jettes un oeil dedans pour les erreurs php.
d'autre part, utilises pour le dev plutôt firefox avec la barre webdevelopper et firebug, ça te permet de bien voir ce qui se passe pour ton dom et ton js.
Hors ligne
oui je ne suis pas clair 
je n'arrive pas à trouver le bon code et le bon emplacement pour que la fenêtre de chat scroll automatiquement sur le dernier message affiché. pour le moment je suis obligé de jouer à chaque nouveau message avec l'ascenseur...
Hors ligne
billboc a écrit:
si ça peut aider je rajoute le fichier php qui va avec...
Code:
<?php /* author: chris at linuxuser.at licence: GPLv2 */ $fn = "chat.txt"; $maxlines = 10; /* Set this to a minimum wait time between posts (in sec) */ $waittime_sec = 0; /* spam keywords */ $spam[] = "nigger"; $spam[] = "cum"; /* IP's to block */ $blockip[] = "12.34.567.89"; /* spam, if message IS exactly that string */ $espam[] = "ajax"; /* Get Message & Nick from the Request and Escape them */ $msg = $_REQUEST["m"]; $msg = htmlspecialchars(stripslashes($msg)); $n = $_REQUEST["n"]; $n = htmlspecialchars(stripslashes($n)); if ($msg != "") { foreach ($blockip as $a) { if ($_SERVER["REMOTE_ADDR"] == $a) { die(); } } $mystring = strtoupper($msg); foreach ($spam as $a) { if (strpos($mystring, strtoupper($a)) === false) { /* Everything Ok Here */ } else { die(); } } foreach ($espam as $a) { if (strtoupper($msg) == strtoupper($a)) { die(); } } $handle = fopen ($fn, 'r'); $chattext = fread($handle, filesize($fn)); fclose($handle); $arr1 = explode("\n", $chattext); if (count($arr1) > $maxlines) { /* Pruning */ $arr1 = array_reverse($arr1); for ($i=0; $i<$maxlines; $i++) { $arr2[$i] = $arr1[$i]; } $arr2 = array_reverse($arr2); } else { $arr2 = $arr1; } $chattext = implode("\n", $arr2); if (substr_count($chattext, $msg) > 2) { die(); } $out = $chattext . "<strong>" . $n . "</strong>" . ": " . $msg . "<br>\n"; $out = str_replace("\'", "'", $out); $out = str_replace("\\\"", "\"", $out); $handle = fopen ($fn, 'w'); fwrite ($handle, $out); fclose($handle); } ?>
alors ligne 13 et 14, déjà tu devrais plutôt utiliser une déclaration unique car sinon, à 1 ligne par mot t'es pas rendu 
donc : $spam=array('nigger','cum','toto','titi');
meme remarque ligne 17 pour block ip
sinon l'utilisation de $_REQUEST ne me plait pas trop, il serait plus secure d'utiliser $_POST afin d'éviter les tentatives d'injection facilitées par des variables en $_GET. Au cas où, petite précision, $_REQUEST traite à la fois les $_GET ET les $_POST, et représente donc une solution que personnellement j'utilise en dernier recours de chez dernier recours...
après sur le reste de ton code pas facile de te dire ce qui merdouille, essayes de nous en dire plus, notamment comme je te le disais au niveau des erreurs.
pour le problème des caractères accentués, ne fais pas trop gaffe à IE, la base est de vérifier que ce qu'il y a des ton fichier texte est bien en entités, si c'est le cas, teste sous Safari, chrome et FF, ça devrait marcher. Pour IE, vérifies que tu n'aies pas forcé des paramètres de langue ou d'encodage dans tes menus. Malheureusement je n'ai pas IE (hormis dans des machines virtuelles pour test), mais parfois avec IE... c'est un peu la merdouille 
Hors ligne
PS : sinon pour moi ton code php à l'air clean
Hors ligne
merci pour le $_request je ne savais pas ! je vais essayer le $_post
sinon penses tu que ce type de code
var intElemScrollHeight = document.getElementById('id').scrollHeight;pourrait me permettre de régler le problème d'autoscroll ?
ou dois-je le placer dans le javascript ?
Hors ligne
salut,
alors le souci c'est que j'ai du mal à visualiser à la fois ton souci et ce que tu cherches à régler. aurais-tu une url où je puisse visualiser ta page de test ?
sinon, globalement pour le js, je te conseille plus d'utiliser jquery que de faire du js pur, cela te permet déjà d'éviter pas mal de soucis liés aux navigateurs hétérogènes.
ici, ta ligne veut dire que intElemScrollHeight est égal à la hauteur de ton élément ayant pour id : "id"
est ce que cela t'aide ?
Hors ligne
effectivement on est plus sur la même longueur d'onde j'ai l'impression 
donc je reprend à zero !
- globalement mon chat fonctionne bien
j'ai juste des améliorations à faire !
voici la 1ère :
quand j'ai plus de messages que de lignes dans ma fenetre de chat
l'ascenseur est placé en haut de la fenêtre du chat alors que les messages apparaissent en bas !
donc on ne les voit pas arriver !
je cherche un moyen de faire un "focus" sur le message qui arrive ou comment laisser l'ascenseur de ma fenetre chat en bas...
par contre mon blog est privé donc je ne peux pas te passer d'URL
veux tu une copie d'écran ou as tu compris ce que je voulais dire ?
merci !
Hors ligne
non j'ai compris, dans ce cas, je testerais ça après le refresh :
ton_textarea.scrollTop = ton_textarea.scrollHeight;
colles ca dans une fonction et exécute ta fonction 
edit > bah c'est ce que tu avais tenté au dessus !!! ben ça marche comme ça pourtant, peut être tu le déclenches pas comme il faut je sais pas trop.
Dernière modification par codegrabber (01/02/2011 09:28:35)
Hors ligne
et à ton avis quel serait le meilleur emplacement dans mon javascript pour placer ce code ?
j'ai essayé en ligne 19 et 22 sans succès...
Hors ligne