(прямой код не кидаю, так как кроме чата у меня выводится тех.информация в чат, а вам оно не надо).
В чате выводится 20 строк методом ajax jquery, т.е без перезагрузки страницы...количество строк можно регулировать по желанию. Сообщения записываются в текстовой файл и оттуда же считываются.
В моей игре работает без проблем - http://vkontakte.ru/app1991084
Файл index.php:
вставляем прокручивающийся див туда где нужно выводить текст чата, высоту регулируем в height:
Код: Выделить всё
<div id="chats" style="height:100; overflow: scroll; overflow: auto; background-color: white; text-align:left; padding:2px 2px 2px 2px; margin:0px 0px 2px 0px; color:#b6b19d; border:1px solid #bdc7d8">
Код: Выделить всё
<input type=text id="textchat" name="textchat" title="напишите сообщение в чат" size=30 maxlength=50> <INPUT TYPE=IMAGE SRC="chatadd.gif" onmouseover="this.src='chatadd2.gif';" onmouseout="this.src='chatadd.gif';" id="okey3" name="okey3" onclick="addchats(document.getElementById('textchat').value); return false;" title="написать в чат" VALUE="написать">
Код: Выделить всё
<script type="text/javascript">function addchats(text) { var text = text; if (text == "") var text = "всем привет"; var stroka2 = "<? echo "$zid $zname $zfam пишет:"; ?>"; $.post("addchat.php", { check: text, stroka: stroka2 }, function(data) { document.getElementById('textchat').value=''; } ); } </script>
addchat.php. В переменных $zid $zname $zfam у меня: ид имя и фамилия. (надеюсь как засунуть их в переменную вы сами знаете).
Ну и на последок в index.php будет функция которая выводит текст в чат:
Код: Выделить всё
<script type="text/javascript"> function chatad() { $.post("getchat.php", { }, function(data) { document.getElementById('chats').innerHTML = ''; for(var i = 1; i <= 20; i++) { document.getElementById('chats').innerHTML += ' ' + $(data).find("time" + i).text() + ' ' + '<a href=http://vkontakte.ru/id' + $(data).find("uid" + i).text() + ' ' + 'target="_blank">' + $(data).find("first_name" + i).text() + ' ' + $(data).find("last_name" + i).text() + '</a>'; document.getElementById('chats').innerHTML += ' ' + $(data).find("text" + i).text() + ' <br>'; } }, "xml" ); setTimeout('chatad()', 1000); }</script>
i <= 20 - означает что выполняет цикл 20 раз, т.е выведется 20 строк, о чем я и писал в самом начале, если надо больше ставим больше!
эту функцию нам надо выполнять раз в секунду, чтобы обновлялся чат:
Код: Выделить всё
<script type="text/javascript">setTimeout('chatad()', 1000);</script>
ну и содержимое addchat.php и getchat.php:
getchat.php:
Код: Выделить всё
<?header('Content-Type: text/xml; charset=UTF-8');$file5 = file("chat.txt");if ($file5) {$ss2 = 0;for ($ss=1;$ss<21;$ss++) {${pieces.$ss} = explode(" ", iconv('windows-1251', 'UTF-8', $file5[$ss2]));$ss2++;}} echo"<xml><body>"; for ($t=1;$t<21;$t++) { echo "<time$t>" . ${pieces.$t}[0]. "</time$t>"; echo "<uid$t>" . ${pieces.$t}[2]. "</uid$t>"; echo "<first_name$t>" . ${pieces.$t}[3]. "</first_name$t>"; echo "<last_name$t>" . ${pieces.$t}[4]. "</last_name$t>"; echo "<text$t>"; for ($mm=5;$mm<count(${pieces.$t});$mm++) { echo ${pieces.$t}[$mm]." "; } echo "</text$t>";} echo "</body></xml>"; ?>
Код: Выделить всё
<?if (isset($_POST['stroka'])) { $dates = date( 'H:i:s d/m/y', time() );$chatstr = $dates;$storki = $_POST['stroka'];$chatstr = "$chatstr $storki";$testfrom = $_POST['check'];$chatstr = "$chatstr $testfrom";$chatstr = iconv('UTF-8', 'windows-1251', $chatstr);} $file_chat="chat.txt"; // файл гостевой книги$file_temp="tempchat.txt"; // временный файл $fe = file_exists($file_temp); if($fe != TRUE) {if(copy($file_chat, $file_temp)) { if($w=fopen($file_chat,"w")) { flock($w,2); // локируем файл fwrite($w,$chatstr."\n"); // записываем первую строку if ($r=fopen($file_temp,"r")) { flock($r,1); $x = 0; while( ($str=fgets($r,10240)) && ($x < 20) ) // читаем построчно { $x++; fputs($w,$str); // пишем построчно } flock($r,3); fclose($r); flock($w,3); fclose($w); unlink($file_temp); } } }} ?>