
Новичок
Профиль
Группа: Участник
Сообщений: 45
Регистрация: 5.3.2009
Репутация: нет Всего: нет
|
Тебе надо хорошие знания Ajax и JSON для создания чата но всё на сасом деле просто: 1. Есть таблица в базе вида: ID | Кто пишет | Кому пишет | Сообщение | Статуст сообщения (системное, админ послал, приватное, приватное системное) Делаеш Аякс запрос потом скидуеш в ДЖсон и добовляеш сообщения в див Пример маего Ява скрипт обработчика без Джесон | Код | <script> function addSmile(smile) { $('textarar').value += smile; } function showSmiles(type) { $('love').style.display='none'; $('sings').style.display='none'; $('more').style.display='none'; $(type).style.display='block'; } google.load("language", "1"); function stop_chat() { var id = document.getElementById('hide_id').value; if (id == "") return false; new Ajax.Request('sources/stopchat.php?id='+id, { method: 'get', onSuccess: function(Server) {
} }); } function getMovie() { var M$ = navigator.appName.indexOf("Microsoft")!=-1 return (M$ ? window : document)["BridgeMovie"]; }
function sendSetVariable() { var movie = getMovie(); movie.SetVariable("message", ''); }
// Hook for Internet Explorer. if (navigator.appName && navigator.appName.indexOf("Microsoft") != -1 && navigator.userAgent.indexOf("Windows") != -1) { document.write('<script language=\"VBScript\"\>\n'); document.write('On Error Resume Next\n'); document.write('Sub BridgeMovie_FSCommand(ByVal command, ByVal args)\n'); document.write(' Call BridgeMovie_DoFSCommand(command, args)\n'); document.write('End Sub\n'); document.write('</script\>\n'); }
function translate_text() { var text = $('textarar'); var lang = $('lang1'); var lang1 = $('lang2'); google.language.translate(text.value, lang.value, lang1.value, function(result) { if (!result.error) { var text = $('textarar'); text.value = result.translation; } });
} function add_message() {
var text = document.getElementById('textarar'); var message_window = document.getElementById('message_window'); var to_id = document.getElementById('hide_id').value; if (to_id == '') { alert("Chose bitch"); return; } var my_nick = '<?=$myname["Login"]?>'; dateObjectName = new Date(); var cur_date = dateObjectName.getHours()+':'+dateObjectName.getMinutes(); //message_window.innerHTML += '<a href="javascript">'+my_nick+'</a> | '+cur_date+'<br>'+text.value+'<br>'; var obj = {"message":text.value,"cur_date":cur_date,"to_id":to_id}; new Ajax.Request('sources/sendmessage.php', {method: 'post',parameters: obj,onSuccess: function(Server) {}}); text.value = ''; } function refreshMessages() { var to_id = $('hide_id').value; //if (to_id == "") return; new Ajax.Request('sources/getnewmessages.php?id='+to_id, { method: 'get', onSuccess: function(Server) { if (Server.responseText.length > 10) { $('message_window').innerHTML = Server.responseText; $('message_window').scrollTop = 10000; sendSetVariable(); } } });
} function checkNewMessages() { new Ajax.Request('sources/checknewmessages.php', { method: 'get', onSuccess: function(Server) { var to_id = $('hide_id').value; var ids = Server.responseText.split("|||"); for(i=0;i<ids.length;i++) { if (to_id != ids[i]) { var gender = $('user_gender_'+ids[i]).value; if (gender == 1) $('user_ico_'+ids[i]).src='images/blink_ico_man.gif'; else $('user_ico_'+ids[i]).src='images/blink_ico_woman.gif'; $('user_login_'+ids[i]).style.color = '#aa1340'; } }
} });
} function aceptUser(user,msg,arr) { new Ajax.Request('sources/acept.php?user='+user+'&msg='+msg, {method: 'get',onSuccess: function(Server) { addToContactList(user); change_user(user,arr[0],arr[1]); }}); } function sheckCals() { new Ajax.Request('sources/calluser.php', { method: 'get', onSuccess: function(Server) {
$('message_window').innerHTML = Server.responseText+$('message_window').innerHTML;
} }); } function ignoreuser(id,msg) { new Ajax.Request('sources/ignore.php?id='+id+'&msg='+msg, {method: 'get',onSuccess: function(Server) {}}); } function refreshUsers() { var sort = $('sortby').value; new Ajax.Request('sources/getnewusers.php?sort='+sort, { method: 'get', onSuccess: function(Server) {
$('users_online').innerHTML = Server.responseText;
} }); } function refreshContactList() { var to_id = $('hide_id').value; new Ajax.Request('sources/contactlist.php?id='+to_id, { method: 'get', onSuccess: function(Server) {
$('contactListUsers').innerHTML = Server.responseText;
} }); } function callUser(id) { new Ajax.Request('sources/calluser2.php?id='+id, {method: 'get',onSuccess: function(Server) {}}); } function setDefaults(img) { var to_id = $('hide_id').value; if (to_id == "") { var wh = document.getElementById('whs'); wh.innerHTML = "Choose you desteny"; document.getElementById('user_pic').src = img; } } setInterval('setDefaults("<?=$img?>");',500); setInterval('refreshMessages()',500); setInterval('refreshUsers()',1000); setInterval('checkNewMessages()',1500); setInterval('refreshContactList()',3000);
function change_user(id,foto,login,color) { document.getElementById('hide_id').value=id; if ($('anketa_'+id)) $('anketa_'+id).style.display='none'; var wh = document.getElementById('whs'); wh.innerHTML = login; document.getElementById('user_pic').src = foto; $('user_login_'+id).style.color = '#1712EB'; $('user_row_'+id).style.backgroundColor=color; $('user_row_'+id).onmouseout = function() { this.style.backgroundColor=color; } new Ajax.Request('sources/sendmessage.php?update=1', { method: 'get', onSuccess: function(Server) {
} });
} function addToContactList(id) { new Ajax.Request('sources/addtocontactlist.php?id='+id, { method: 'get', onSuccess: function(Server) {
if (Server.responseText.length > 0) { var info = Server.responseText.split("|||"); if (info[3] == 1) var ico = 'ico_man.png'; else ico = 'ico_woman.png'; document.getElementById('contactListUsers').innerHTML += '<TR id="user_row_'+id+'"><TD align="left" class="cont_list"><input name="user_gender_'+id+'" id="user_gender_'+id+'" type="hidden" value="'+info[3]+'"> <IMG id="user_ico_'+id+'" src="images/'+ico+'"><B> <a href="javascript:void(0);" oncontextmenu="return menu(1, event,'+info[0]+',\''+info[1]+'\',\''+info[2]+'\');" onclick="change_user('+info[0]+',\''+info[1]+'\',\''+info[2]+'\');">'+info[2]+'</a> <a href="javascript:callUser('+info[0]+');change_user('+info[0]+',\''+info[1]+'\',\''+info[2]+'\');"><img src="http://vkagy.com/templates/images/chat.gif" border="0"></a></B> <a href="#"><img src="images/call.gif" border="0"></a><a href="#"><img src="images/stream.gif" border="0"></a> </TD></TR>'; } } }); } function deleteUser(id) { new Ajax.Request('sources/deleteuser.php?id='+id, { method: 'get', onSuccess: function(Server) {
if (Server.responseText == "Succes") { $('user_row_'+id).style.display='none'; $('hide_id').value = ''; } } }); } function deleteAllUsert() { new Ajax.Request('sources/deleteuser.php?delete=', { method: 'get', onSuccess: function(Server) {
} }); } function defPosition(event) { var x = y = 0; if (document.attachEvent != null) { // Internet Explorer & Opera x = window.event.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft); y = window.event.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); } else if (!document.attachEvent && document.addEventListener) { // Gecko x = event.clientX + window.scrollX; y = event.clientY + window.scrollY; } else { // Do nothing } return {x:x, y:y}; }
function menu(type, evt, id, foto, login) { // Блокируем всплывание события contextmenu evt = evt || window.event; evt.cancelBubble = true; // Показываем собственное контекстное меню var menu = $("contextMenuId"); var html = ""; switch (type) { case (1) : html = "Menu propertys"; html += "<br><a href=javascript:change_user("+id+",'"+foto+"','"+login+"');>Send message</a>"; html += "<br><a href='#'>Send gift</a>"; html += "<br><a href=javascript:deleteUser("+id+");>Delete</a>"; break; default : // Nothing break; } // Если есть что показать - показываем if (html) { menu.innerHTML = html; menu.style.top = defPosition(evt).y + "px"; menu.style.left = defPosition(evt).x + "px"; menu.style.display = ""; } // Блокируем всплывание стандартного браузерного меню return false; }
// Закрываем контекстное при клике левой или правой кнопкой по документу // Функция для добавления обработчиков событий function addHandler(object, event, handler, useCapture) { if (object.addEventListener) { object.addEventListener(event, handler, useCapture ? useCapture : false); } else if (object.attachEvent) { object.attachEvent('on' + event, handler); } else alert("Add handler is not supported"); } addHandler(document, "contextmenu", function() { document.getElementById("contextMenuId").style.display = "none"; }); addHandler(document, "click", function() { document.getElementById("contextMenuId").style.display = "none"; }); </script>
|
пример как получать сообщения с сервера: | Код | <?php include "../../config.php"; include "../../common.php"; $id = (isset($_SESSION["ManID"])) ? $_SESSION["ManID"] : $_SESSION["LadyID"];
$x = "";
$sql = "SELECT * FROM CHAT_MESSAGES WHERE (CHAT_MESSAGES.to_id = $id OR CHAT_MESSAGES.from_id = $id ) AND CHAT_MESSAGES.is_read = 0 AND CHAT_MESSAGES.`status` = 0 ORDER BY CHAT_MESSAGES.`times` DESC"; $bind = mysql_query($sql) or die(mysql_error()); if (mysql_num_rows($bind)) {
$sql = "SELECT USERS.Login, USERS.id as uid, USERS.gender, CHAT_MESSAGES.* FROM CHAT_MESSAGES INNER JOIN USERS ON USERS.id = CHAT_MESSAGES.from_id WHERE (CHAT_MESSAGES.to_id = $id OR CHAT_MESSAGES.from_id = $id) AND (CHAT_MESSAGES.to_id = ".intval($_GET["id"])." OR CHAT_MESSAGES.from_id = ".intval($_GET["id"]).") AND CHAT_MESSAGES.`status` = 0 AND (CHAT_MESSAGES.is_read = 0 OR CHAT_MESSAGES.is_read = 1) ORDER BY CHAT_MESSAGES.`times` ASC"; $bind = mysql_query($sql); mysql_query("UPDATE CHAT_MESSAGES SET is_read = 1 WHERE to_id = $id"); $love = scandir("../smiles/love"); $sings = scandir("../smiles/sings"); $enather = scandir("../smiles/enather"); While($lfx_rows = mysql_fetch_assoc($bind)) { for($i=0;$i<sizeof($love);$i++) $lfx_rows["messages"] = str_replace(":$love[$i]:","<img src=\"smiles/love/$love[$i]\" border=\"0\">",$lfx_rows["messages"]); for($i=0;$i<sizeof($sings);$i++) $lfx_rows["messages"] = str_replace(":$sings[$i]:","<img src=\"smiles/sings/$sings[$i]\" border=\"0\">",$lfx_rows["messages"]); for($i=0;$i<sizeof($enather);$i++) $lfx_rows["messages"] = str_replace(":$enather[$i]:","<img src=\"smiles/enather/$enather[$i]\" border=\"0\">",$lfx_rows["messages"]);
if ($lfx_rows["gender"] == 1) $x .= "<a target=\"_blank\" href=\"http://$_SERVER[HTTP_HOST]/anketa.php?id=$lfx_rows[uid]\"><font color=\"#201CCA\"><u>".$lfx_rows["Login"]."</a></u> | ".date("H:i",$lfx_rows["times"])."</font><br>".$lfx_rows["messages"]."<br><br>"; else $x .= "<a target=\"_blank\" href=\"http://$_SERVER[HTTP_HOST]/anketa.php?id=$lfx_rows[uid]\"><font color=\"#aa1340\"><u>".$lfx_rows["Login"]."</a></u> | ".date("H:i",$lfx_rows["times"])."</font><br>".$lfx_rows["messages"]."<br><br>"; } } $sql = "SELECT USERS.Login, CHAT_MESSAGES.* FROM CHAT_MESSAGES INNER JOIN USERS ON USERS.id = CHAT_MESSAGES.from_id WHERE (CHAT_MESSAGES.to_id = $id OR CHAT_MESSAGES.from_id = $id) AND CHAT_MESSAGES.`status` = 1 ORDER BY CHAT_MESSAGES.`times` ASC"; $bind = mysql_query($sql);
While($lfx_rows = mysql_fetch_assoc($bind)) { if ($lfx_rows["from_id"] == $id) $msg = "<br><b>You have sent an invitation to chat</b><br><br>"; else { $sql = "SELECT USERS.Login, USERS.gender, (SELECT photo FROM USER_PHOTOS WHERE USER_PHOTOS.id_user = $lfx_rows[from_id] AND Avatar = 1) as photo FROM USERS WHERE USERS.id = $lfx_rows[from_id]";
$bind2 = mysql_query($sql); $lfx_rows2 = mysql_fetch_assoc($bind2); if ($lfx_rows2["gender"] == 1) {
$type = "men"; } else {
$type = "ladies"; } if ($lfx_rows2["photo"] == "") $lfx_rows2["photo"] = "/image/$type/thumb_default.png"; else $lfx_rows2["photo"] = "/image/$type/thumb_".$lfx_rows["photo"];
$msg = "<a href=\"javascript:aceptUser($lfx_rows[from_id],$lfx_rows[id],['$lfx_rows2[photo]','$lfx_rows2[Login]']);\">Acept</a> | <a href=\"javascript:ignoreuser($lfx_rows[from_id],$lfx_rows[id]);\">Ignore</a> <br><b>You have been invited to chat</b><br><br>"; } if ($lfx_rows["messages"] == 2) $msg = "<br><b>Your proposal rejected</b><br><br>"; if ($lfx_rows["messages"] == 3) $msg = "<br><b>Remote user stopped the chat</b><br><br>"; $x .= $lfx_rows["Login"]." | ".date("H:i",$lfx_rows["times"])." $msg"; }
print $x; ?>
|
Собственно из этого понятно что и как делаеться код читай внимательно )) Это сообщение отредактировал(а) JDmitry - 25.6.2009, 18:29
|