Мини-чат (memcached+ajax)

nshut

Пользователь
#1
Написал чат как мне надо было. Выкладываю может пригодится кому.
  • весь обмен с сервером через ajax, проверка новых сообщений даже авторизацию не вызывает
  • есть приватные сообщения
  • чат выводится из memcache что уменьшает нагрузку (без memcache не работает!)
  • прокрутка идет снизу вверх как везде, а не по .... :)
  • пользователи могут удалять свои сообщения, админы и модеры любые
  • отключение чата в своем профиле (просили многие - добавил)
  • добавлен bbcode (b,s,i,u)
чат проверен на opera, explorer, firefox, chrome
для установки делаем изменения
PHP:
CREATE TABLE `nschat` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
`name` varchar(25) NOT NULL default '',
`user_id` mediumint(8) NOT NULL,
`privto` varchar(25) NOT NULL default '',
`s_time` int(11) NOT NULL default '0',
`msg` varchar(1000) NOT NULL,
`lev` tinyint unsigned not null default '0',
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
ALTER table bb_users add column nschat_on tinyint(1) not null default 1;

---open
templates/default/css/main.css
---find
.row6, .row6 td { background: #E9E9E6; }
---add after
.row9, .row9 td { background: #FFB0B0; }

---open language/lang_russian/lang_main.php
---add at end
$lang['NSCHAT'] = 'Мини-чат';
$lang['NSchat_refresh'] = 'Обновить';
$lang['NSchat_smiles'] = 'Смайлы';
$lang['NSchat_text'] = 'Сообщение';
$lang['NSchat_delmsg'] = 'удалить это сообщение';
$lang['NSchat_prof'] = 'профиль пользователя';
$lang['NSchat_priv'] = 'ник в чат или приватное сообщение';

---open
includes/ucp/usercp_viewprofile.php
---find
'GENDER' => ($bb_cfg['gender'] && $profiledata['user_gender']) ? $lang['GENDER_SELECT'][$profiledata['user_gender']] : '',
---add after
'L_NSCHAT' => $lang['NSCHAT'],
'NSCHAT' => $profiledata['nschat_on'] ? $lang['YES'] : $lang['NO'],

---open
includes/ucp/usercp_register.php
---find
'user_gender' => true,
---add after
'nschat_on' => true,
---find
case 'user_gender':
---add before
case 'nschat_on':
$nschaten=isset($_POST['nschat_on']) ? 1 : 0;
if ($submit && $nschaten!=$pr_data['nschat_on'])
{
$pr_data['nschat_on']=$nschaten;
$db_data['nschat_on']=$nschaten;
}
$tp_data['NSCHAT']=$pr_data['nschat_on'] ? " checked":"";
break;

---open
templates/default/usercp_register.tpl
---find
<!-- IF $bb_cfg['pm_notify_enabled'] -->
---add before
<td>{L_NSCHAT}:</td>
<td><label><input type="checkbox" value="1" name="nschat_on"{NSCHAT}></label></td>

---open templates/default/index.tpl
---find <!-- IF LOGGED_IN -->
---add after
<!-- IF NSCHAT_ON -->
<table width="100%" cellspacing="0" border="0" align="center" cellpadding="2" class="forumline">
<tr><td align="center" nowrap="nowrap" class="catHead"><span class="cattitle">{NSCHAT}</span></td></tr>
<tr><td class="row2">
<iframe src="./nschat.php" scrolling="NO" width="100%" height="200" frameborder="0" marginheight="0" id="69427" marginwidth="0" allowtransparency="true"></iframe></td></tr>
</table><br/>
<!-- ENDIF -->

---open index.php
---find 'FORUM_LOCKED_IMG' => $images['forum_locked'],
---add after
'NSCHAT_ON' => ($userdata['nschat_on'] != 0) ? true : false,
'NSCHAT' => $lang['NSCHAT'],
и загружаем файлы из upload архива на сервер
 

Вложения

Lange

Пользователь
#2
Notice: Undefined variable: to_memcache in \nschat.php on line 48
PHP:
$memc->set('nsc_data',$to_memcache,false,43200);
Написал первое сообщение, всё ок. Как решить проблему чтобы не надо было писать первое сообщение и не выскакивала эта ошибка?
PS Сделай чтобы окно смайлов не на весь экран вылазило.
 

nshut

Пользователь
#3
Locer, добавил два условия на проблему, что в базе чата ничего нет. изначально просто предполагалось что чат пустым не может быть, ну да ладно.
смайлы на весь экран - проверил в трех обозревателях. не нашел такого глюка.
 

Lange

Пользователь
#4
nshut, странно...на хроме нажимаю, на весь экран выскакивает окошко.
Панельку с основными bb кодами можешь прикрутить?:)
 

nshut

Пользователь
#5
в принципе это не сложно. я просто не хотел чтобы в чате пользователи вкладывали картинки двд качества и шрифт размером с рабочий стол. а подчеркивание, зачеркивание и т.д. не сложно. могу накидать завтра. т.е. исходя из вышесказанного какие теги хотелось бы увидеть
 

druid

Пользователь
#7
Ну если и прикручить BBCode, то только эти

[b]
[i]
[s]
[color]
[u]


ну и автозамена текстовых ссылок на URL, если они указывают на раздачи/темы форума
 

nshut

Пользователь
#10
добавил B I U S обработку тегов. увы с цветом возиться не хочется. может кто сам накидает.
добавление ббкодов заняло 10 мин, а коректную обработку в Опере пришлось часа 2 мучиться. все желание пропало :(