перепечатка
отсюда, но теперь и с поддержкой 3.8.*
If you are looking for a nice chat, try out the AJAX Web Chat". There is also a VBulletin Integration, which works fine.
у кого проблемы с кодировкой
PHP Code:
DROP TABLE IF EXISTS ajax_chat_online;
CREATE TABLE ajax_chat_online (
userID INT(11) NOT NULL,
userName VARCHAR(64) NOT NULL,
userRole INT(1) NOT NULL,
channel INT(11) NOT NULL,
dateTime DATETIME NOT NULL,
ip VARBINARY(16) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS ajax_chat_messages;
CREATE TABLE ajax_chat_messages (
id INT(11) NOT NULL AUTO_INCREMENT,
userID INT(11) NOT NULL,
userName VARCHAR(64) NOT NULL,
userRole INT(1) NOT NULL,
channel INT(11) NOT NULL,
dateTime DATETIME NOT NULL,
ip VARBINARY(16) NOT NULL,
text TEXT,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS ajax_chat_bans;
CREATE TABLE ajax_chat_bans (
userID INT(11) NOT NULL,
userName VARCHAR(64) NOT NULL,
dateTime DATETIME NOT NULL,
ip VARBINARY(16) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
и в конфиге
PHP Code:
// The encoding used for the XHTML content:
$config['contentEncoding'] = 'cp1251';
// The encoding of the data source, like userNames and channelNames:
$config['sourceEncoding'] = 'cp1251';
// The content-type of the XHTML page (e.g. "text/html", will be set dependent on browser capabilities if set to null):
$config['contentType'] = null;
для того чтобы сделать только избранные разделы форума в качестче каналов чата
PHP Code:
// Default channelName used together with the defaultChannelID if no channel with this ID exists:
$config['defaultChannelName'] = 'название раздела который будет дефолтным';
// ChannelID used when no channel is given:
$config['defaultChannelID'] = id раздела который будет дефолтным;
// Defines an array of channelIDs (e.g. array(0, 1)) to limit the number of available channels, will be ignored if set to null:
$config['limitChannelList'] = array(id разделов которые хотите сделать каналами чата через запятую);]
права доступа к каналам будут такимиже как у разделов форума. (тоесть если у вас есть раздел тока админы и вы сделаете такойже канал то и в канал войдут тока админы. ну или например есть раздел тока для женщин, сделав его каналом получим канал тока для женщин)
ну и для завершения делаем вывод Кто в чате на главную форума (оформлять модулем лениво поэтому кодом)
в меню Добавить новый модуль
Продукт - vbulletin
Местоположение модуля - forumhome_complete
Заголовок - spitajax_chat_online
Код PHP модуля
PHP Code:
$latestajax_chat_online = $db->query("
SELECT userID, userName, dateTime
FROM ajax_chat_online
ORDER BY dateTime DESC
LIMIT 50
");
while ($showajax_chat_online=$db->fetch_array($latestajax_chat_online))
{
$counter++;
$userID = $showajax_chat_online['userID'];
$ajax_chat_online_userName = $showajax_chat_online['userName'];
$ajax_chat_online_dateTime = vbdate($vbulletin->options['dateformat'], $showajax_chat_online['dateTime']);
$ajax_chat_online_userName=iconv('UTF-8','Windows-1251',$ajax_chat_online_userName);
$spitajax_chat_online .= "<a href=\"chat/\">$ajax_chat_online_userName</a>";
if ($counter < 50)
{
$spitajax_chat_online .= " ";
}
}
для UTF-8 (во избежание кракозябр на главной странице):
PHP Code:
$latestajax_chat_online = $db->query("
SELECT userID, userName, dateTime
FROM ajax_chat_online
ORDER BY dateTime DESC
LIMIT 50
");
while ($showajax_chat_online=$db->fetch_array($latestajax_chat_online))
{
$counter++;
$userID = $showajax_chat_online['userID'];
$ajax_chat_online_userName = $showajax_chat_online['userName'];
$ajax_chat_online_dateTime = vbdate($vbulletin->options['dateformat'], $showajax_chat_online['dateTime']);
$ajax_chat_online_userName=iconv('UTF-8','UTF-8',$ajax_chat_online_userName);
$spitajax_chat_online .= "<a href=\"chat/\">$ajax_chat_online_userName</a>";
if ($counter < 50)
{
$spitajax_chat_online .= " ";
}
}
включаем модуль и сохраняем.
редактируем шаблон forumhome
найти
PHP Code:
<!-- end logged-in users -->
выше добавить
PHP Code:
<tbody>
<tr>
<td class="thead" colspan="2">
<a style="float:$stylevar[right]" href="#top" onclick="return toggle_collapse('forumhome_stats')"><img id="collapseimg_forumhome_stats" src="$stylevar[imgdir_button]/collapse_thead$vbcollapse[collapseimg_forumhome_stats].gif" alt="" border="0" /></a>
<phrase 1="$vboptions[bbtitle]">Сейчас в чате</phrase>
</td>
</tr>
</tbody>
<tbody id="collapseobj_forumhome_activeusers" style="$vbcollapse[collapseobj_forumhome_activeusers]">
<tr>
<td class="alt2"><a href="chat/"><img src="$stylevar[imgdir_misc]/whos_online.gif" alt="$vbphrase[view_whos_online]" border="0" /></a></td>
<td class="alt1" width="100%">
<div class="smallfont">
<div style="white-space: nowrap">$spitajax_chat_online</div>
</div>
</td>
</tr>
</tbody>
в опере 9.60 съезжает вправо чат. причем только под админом (возможно под модератором)
в файле chat/js/chat.js
PHP Code:
+ ');"> </a>' // Adding a space - without any content Opera messes up the chatlist display
и межу > < заменить пробел на что-нибудь другое, например на "_"
Настройка и установка:
1) Заливаешь начинку в папку forum/chat
дальше настраиваешь конфиг. точнее хватает только указать тип базы.('mysql' например)
все остальное он берет из настроек форума.
PHP Code:
// Database connection values:
$config['dbConnection'] = array();
// Database hostname:
$config['dbConnection']['host'] = null;
// Database username:
$config['dbConnection']['user'] = null;
// Database password:
$config['dbConnection']['pass'] = null;
// Database name:
$config['dbConnection']['name'] = null;
// Database type:
$config['dbConnection']['type'] = 'mysql';
// Database link:
$config['dbConnection']['link'] = null;
2) дальше заливаешь в булковсую бд файл chat.sql
3) заходишь в
www.mysite.ru/forum/chat
и все работает. если появляются косяки с кодировкой то заходите в файл конфигурации
у меня все корректно отображается при вот таких настройках:
// The encoding used for the XHTML content:
$config['contentEncoding'] = 'ISO-8859-1';
// The encoding of the data source, like userNames and channelNames:
//$config['sourceEncoding'] = 'ISO-8859-1';
$config['sourceEncoding'] = 'cp1251';
больше для дефолтовой работы ничего не надо.
все остальное это макияж.
скрины:
https://blueimp.net/ajax/img/screens...line-users.png
https://blueimp.net/ajax/img/screens...line-users.png
https://blueimp.net/ajax/img/screens...y-settings.png
DEMO