Web Chat

http://www.e107bg.org/download.php?view.132

Aз от тето тук си бях намерил такъв! - http://84.252.38.50/scripts/Chat%20Scripts/
 
Аз си имам такъв и съм доволен :) т.е това е само канал ама е готино вижте http://82.146.28.174/
 
great каза:
Аз си имам такъв и съм доволен :) т.е това е само канал ама е готино вижте http://82.146.28.174/

:shock: Мен твоя чат ми дава грешка, а и е Java, а не всеки има инсталирана Java :wink:

ПП:
Хора Чат искаше човека да си сложи собствен, не да ползва такъв от някакъв сайт инсталиран и да зависи от сайта на който си е направил "канал" :)
 
Доколкото знам има нелоши чатове, които използват възможностите на HTML -формите и ги задвижват с PHP с минимално използване на файлове и без да се налага БД. Досега не съм правил опити за подобен чат (макар да съм обмислял възможността), но вярвам, че няма да е непосилно сложно. Всъщност, зависи от изискванията.

Интерфейса:
ОСНОВЕН ФАЙЛ, в който се включват чрез фреймове два файла.
Първият, най долу, съдържа текстово поле (textarea) или едноредово поле (TYPE='text') - тук потребителите ще въвеждат репликите си.

Във втората рамка се визуализиа текстови-файл, в който чрез РНР-скрипт се записва информацията от текстовото поле. На втория файл се задава да се рефрешва, примерно на 5 секунди:
<META HTTP-EQUIV="refresh" CONTENT="5">

Тъй като текстовия файл (онзи, в който пишем) ще набъбва прогресивно може да се въведе цикъл, проверяващ неговия размер. Задаваме някакъв лимит, примерно от 100 кб и периодично изтриваме излишната част като поставяме позицията на парсера в началото на файла.
Този подход обаче ще реже репликите и няма да е много удачен.

Би могло да се помисли за някакъв разделител м/у отделните реплики и после да четем файла и да трием до разделителя, но ще се наложи по-сложен код, защото при визуализацията сигурно ще се наложи да се използват поне два взаимно обвързани масива... Като написах масиви, сещам се, че можем да записваме всяка реплика на нов ред, после с функцията explode(); да изкараме редовете като масив, а ако имаме и разделител можем да накараме парсера да трие до разделителя или пък до края на реда (мисля, че е възможно, не съм опитвал).

Току-що ми хрумва, че рефрешването може да става и по друг начин (може би чрез js, с който не се справям никак добре): когато някой от потребителите натисне <enter>... Всъщност, ще трябва и РНР + js... Което веднага прави последния излишен. Проверяваме за нова пост-заявка и когато имаме такава рефрешваме файла в горната рамка на страницата. Не съм го обмислил още... Ще трябва js :(

Хрумва ми, че при рефрешването ще се наложи да поставим някакъв маркер, за да може след рефреша да показва най-долната част на файла (последните реплики) иначе новите ще са под рамката на прозореца (той ще има старата позиция) и за потребителя ще бъде дразнещо след всеки рефреш да превърта надолу... В момента не ми хрумва как да се създаде такъв маркер, най-вероятно котвите <A NAME=' '> няма да помогнат, сигурно с js, освен ако рамките не предлагат някаква подобна възможност (някаква допълнителна стойност на target=' ' знам ли).

Оства проблема с логина, сесиите и визуализирането на наличните потребители, иначе ще имаме само една обща стая за разговор, в която всички ще са гости :)

Не се справям никак с логин и сесии (приемам, че са създадени).

За да визуализираме наличните потребители добавяме трета рамка в основния файл. В нея правим файл-списък на потребителите он-лайн или ги визуализираме чрез ехо на всички юзърнейм от сесийния регистър (не знам, как да се добера до него :) ) - зная, че връща масив. Цикълът, с който го обхождаме трябва да поставя анчъри срещу всяко име, така, че когато потребителят кликне върху него да отвори нов прозорец(+задействане на РНР-скрипт) имащ съдържание подобно на основния (ако е само HTML стойността на анчъра е <TARGET=_blank>, но за предпочитане е да се ползва js, който да игнорира адрес-бара на браузъра за пригледност и АКО Е ВЪЗМОЖНО да намести по някакъв начин текущия прозорец в основния - не зная как да го опиша по-точно, може би могат да се използват и рмаки, но мисля си, че ще стане доста натопорчено ако правим всичко в един прозорец) .
За да не стане объркване, файлът, в който ще се записва новия диалог (вече привейт) получава име, сбор от имената на двамата юзери.

Когато един от юзерите излезе (сесията се закрива) това трябва да служи като повод, текущият текстови файл да се изтрие. На подобен принцип (когато в чата не останат потребители) изтриваме и текствоя файл в общата стая. Щом влезе някой го създаваме отново с ( а+)...

Толкова. Най-вероятно ще изскочат още една камара подводни камъни, когато тръгне да се пише кода, така че ще бъде по-сложно, отколкото ми се струва на пръв поглед. Във всичко случаи подобен чат не би могъл да помеме много потребители. Като екстра към една неособено натоварена страница - да, но ако целта е по-висока, слабостите на подхода ще лъснат веднага...

Когато тръгвах да отговарям, хрумна ми вариант всяка реплика в нов файл (привейт файловете в отделни директории), после инклудваме наличните файлове в съответната директория (ако се налага сортираме ги по време), когато надвишат определен брой трием по-старите, но става много-много тежко... По-добър ефекет, защото с отделния файл можем да правим практически всичко, което ни хрумне, но тежко за ползване... направо ненормално гадно...

Ако искаш една-единствена стая за разговори, с елементарен логин, без сесии и т.н. мога да ти напиша кода, но ако искаш по-добро качество, ще имам нужда от доста сериозна помощ.
Всъщност идеята ме запали, така че ако има някой, който е склонен да поеме логина, сесиите и js, аз съм готов да напиша останалия код...
 
Сега ме карате да изваждам детския си чат дето го направих преди време.
С едно текстово файлче.
Помните ли? :)
 
Здравей, Админ!

Ако разполагаш с готов код, ще е интересно да го публикуваш. С един файл? Аз поне съм любопитен :)

ПП: използваш криптиране (ако не го бъркам с кодиране :shock: )?
 
Беше някаква супер голяма глупост с един текстов файл.
За логин се ползваше базата данни на форума.
Тъпотия ама работеше.
Махнах го, защото го ползваха за изказвания от сорта на "Баба ми е мъжка". :D

Кода няма да давам (защото е гаден) но мога да го намеря да го видите, че става с един файл (текстов).
 
Предложението ми продължава да важи, стига да не смятате подобен проект за ненужен...
Админ, не си ли склонен да се пробваш в подобна задачка?
 

Back
Горе