Как создавать чаты? Система создания, алгоритмы и возможные ошибки?
Наверняка здесь есть много людей которые уже это делали...
Хочу спросить как реализовать его, то есть мне не нужены сами примеры...
Возник такой вопрос: Где хранятся все сообщения которые выводяться пользователю? В каком нибудь файле или сессии? Как лучше реализовать это?
И еще, абстрактный вопрос: Как можно добавить в функцию смайликов?
Заранее спасибо
Сообщения имхо лучше хранить в базе. Потому что проще брать выборки, отображать статусы и так далее. Смайлики - простым регекспом заменять на теги <img ... />
точно, а когда чат сделаешь, напиши FAQ по этому делу и выкладывай сюда, чтобы народ больше таких вопросов не задавал... и не мучался с изучением скриптов чужих. :)
дальше вопрос уже в создании самого чата...сложности нету никакой, реализация как обычного скрипта гостевой книги... сообщения в бд, добавляется если надо поля типа кому сообщение, приватное ли и т. п.... встаёт проблема обновления окна чата... смотреть на эту тему другие чаты очень не советую... когда писал свой, я накачал штук 10, но понятного ничего не было... для начала советую написать банальное окно, которое через meta refresh обновляется раз в пару секунд... в самом скрипте идёт или выборка новых сообщений с какого-то момента, или просто всех... затем поняв сам механизм, обновление можно реализовать по другому... например через iframe или просто скрытый фрейм, из которого уже брать новые сообщение... или используя ajax... или не очень хороший вариант - в главном окне чата бесконечный цикл, сообщения выдаются на экран с использованием буферизации вывода... работает, но нестабилен к обрывам связи...
Все верно, но если писать чат, то не с обновляющимся frame'ом или iframe'ом (хотя и их можно оставить для старых браузеров), а использовать dom, ajax и setTiemout.
Нужно чтобы при нажатии на смайл его код попадал в содержимое <textarea>Вот здесь он появляется его код(нр: $smile )</textarea>
Заранее спасибо...
вот тебе пример, я думаю разберешься )
[html]
<script>
function addSmile(code) {
document.getElementById('textarea_id').value += code; // добавляем в textarea код смайла
}
</script>
<!--................ -->
<a href="java script:void(0);" onClick="addSmile(':confused:');"><img src="images/confused.gif"></a> // а вот ссылка с вызовом функции.... добавляет код :confused:
<textarea id="textarea_id"></textarea> // вот наша textarea
[/html]
Респект вам...
Блин ну как раз то что надо было, вообще супер... Сколько еще я разбирал разные книжки, описание аргумента id в textarea нигде не было...
обращайся =) тут народу уйма ) глядишь того и подскажут :)
[HTML]<table border='1'><tr><td width='400' height='10'></td></tr><tr><td><font size='2'>1111111111111111111111111111111111111111111111111111111111111111111111111</font></td></tr></table>
<table border='1'><tr><td width='400' height='10'></td></tr><tr><td><font size='2'>22222222222222222222222</font></td></tr></table>[/HTML]
Если его открыть в Браузере то видно, что там где только 2 атрибут width='400' работает нормально, а там где 1 он расширяеться вместе с текстом...
Нужно чтобы был переход на следущую строку, а не расширение таблицы... Хотя я могу написать алгоритм разделения, думаю просто наверняка есть другой способ, или какой-нмбудь(которого не знаю) атрибут у <table>...
1. Проверять RegExp-ом выводимую строку на нечто такое: /[\S]{90}/s. И менять на то же самое с переносом строки.
2. см. свой пост и каким образом выведен "Код HTML:"
в общем все сообщения, что были без пробелов и длиннее 80 символов резались на части по 80 символов а каждым 81м символом был \n ну или как в HTML это <br/>... вот...
я лично так избавился от проблем с переносами :) а еще можно PHP (здесь было JS но чёт я не подумал... на серверсайд это будет сделать проще :) ) смотреть длину строки, и относительно размера шрифта, например 10px, резать (разделять <br/>'ами) строку на такие части, которые бы помещались в 400px. но тогда учитывай что у тебя есть cellpadding и cellspacing
А еще если не ошибаюсь, можно написать алгоритм проерки текста, и ставить в тексте переносы строки через например 20 символов...
Просто я думал, может можно обойтись простыи тегами...
Ну ладно спасибо...
еще есть такое свойство у таблички (в CSS), называется table-layout (может принимать значения fixed и auto). вот при значении Fixed табличка не расширяется )))) но текст рисуется поверх... то есть как бы уходит за пределы... щаз поэкспериментирую, скажу, если получится =)
А для JS дело предложил Dolonet, резать regexp'ом
string wordwrap (string str [, int width [, string break [, int cut]]])
- разбивает текст на строки указанной длины
А вот и пример:
Код:
<?php
$ourstr = "111222233322222222rdgdfgвауекоено";
$ourstrwordwrap= wordwrap($ourstr,6,"<br>",1);
echo $ourstrwordwrap;
?>
$ourstr = "111222233322222222rdgdfgвауекоено";
$ourstrwordwrap= wordwrap($ourstr,6,"<br>",1);
echo $ourstrwordwrap;
?>
[, int cut] - совсем не понял зачем нужен этот аргумент только...
rjchat.ru. Чат готов не полностью, много недостатков, но реализована лучшим образом система обновления списка пользователей, список всегда актуален... Есть поддержка смайлов, система игнора и т.д. Чат реализован на Ajaxe. Устанавливал его в своём университете, чат легко выдерживает 150 чел на Pentium II, хотя других недостатков много... устранять из и доводить чат до совершенства нет времяни... по крайней мере пока.
Могу выслать исходники своего чата
молоцом, только вот в FF и Opera что-то как-то корявенько. ну там в принципе написано, что не поддерживает "не IE"
могу послать сорцы своего чата, он довольно маленький, но работает...
давай выкладывай ща посмотрим,укажим на ашибки
А вообще кто-нибудь пожалуйста введите меня в dom, ajax и setTiemout... Просто не раз что-то не встречал...
Ну последние(setTiemout) думаю это функция пыхи... Может у кого примеры есть маленькие?
Заранее спасибо... :)
это функция JS.
http://www.codenet.ru/webmast/js/ajax/AJAX-Application.php - AJAX
http://www.w3schools.com/htmldom/dom_reference.asp - DOM
ЗЫ: google it!
Извиняюсь, JavaScript... Просто, написал так нечайно...
Цитата: Rine
Да... Ну просто я Java как-то углубленно не изучал
Никогда не путай Java и JavaScript!