
Полное обновление чата
модуль для DLE iChat 6.0 от SX2, новые смайлы и шаблон, три языка, звук, и многие интересные хаки добавлены все здесь. Из-за большого количества обращений от пользователей
DataLife Engine с просьбой адаптировать шестую версию iChat, и сложности с
iChat 7.0 связанной с проблемой SQLite автор SX2 нашел время и допилил данный экземпляр, дополнил новыми возможностями о которых можно прочитать ниже
Все тесте проводились на
DLE 10.6 в кодировке CP1251
- Исправлено кэширование
- Полная поддержка
DLE 10.5 и выше
- Добавлена версия UTF-8
- Исправлена проблема, когда гость не мог отправить сообщение
- Добавлена поддержка тегa code
- Почищено от всех левых ссылок, оставлены только копирайты автора
- Оптимизирован JS
- Прочее
Видео чата и демонстрация его возможностей
Внимание! У Вас нет прав для просмотра скрытого текста.
В блоке:
{include file="engine/modules/iChat/show.php"} [/quote]
В окне:
<input class="bbcodes" style="font-size: 11px; float: left;" title="Чат в новом окне" onclick="window.open('/engine/modules/iChat/window.php', '_iChat', 'toolbar=0,location=0,status=0, left=0, top=0, menubar=0,scrollbars=yes,resizable=0,width=620,height=605');" type="button" value="Чат в новом окне" />
На отдельной статической странице:
Эта инструкция актуальна и для iChat 7.0
Разные дополнения к модулю для DLE 10.6 iChat 6.0!
После небольших правок, шаблоны могут работать как на 6 так и на 7 версии чата!
Смотрите в архиве файл:
shablony.rar
Идем в iChat/ajax/refresh.php находим:
?>
Выше добавляем:
//Сигнал
if(md5($Messages) != $_SESSION['md5_Messages']){
echo <<<HTML
<embed src="/engine/modules/iChat/sound/new.swf" width="0" height="0" autostart="true" loop="false"></embed>
HTML;
}
$_SESSION['md5_Messages'] = md5($Messages);
Распаковать архив с файлом sound и добавить в папку iChat на сервере
Смотрите в архиве файл:
sound.rar
Для начала выполните SQL запрос:
ALTER TABLE dle_iChat ADD foto varchar(40) NOT NULL default '' ;
От пользователя
w1st 27.03.2017 21:32
Так как у некоторых, из за длины домена, сильно обрезает ссылку на картинку, и в итоге, аватарки не работают!
" ALTER TABLE dle_iChat ADD foto varchar(40) NOT NULL default '' ; "
лучше следующий запрос меняем 40 на 55
" ALTER TABLE dle_iChat ADD foto varchar(55) NOT NULL default '' ; "
В /engine/modules/iChat/build.php после
$tpl->set ( '{id}', $row['id'] );
Добавляем:
if (count(explode("@", $row['foto'])) == 2) {
$tpl->set('{gravatar}', $row['foto']);
$tpl->set('{foto}', '//www.gravatar.com/avatar/' . md5(trim($row['foto'])) . '?s=' . intval($user_group[$row['user_group']]['max_foto']));
} else {
if ($row['foto']) {
if (strpos($row['foto'], "//") === 0)
$avatar = "http:" . $row['foto'];
else
$avatar = $row['foto'];
$avatar = @parse_url($avatar);
if ($avatar['host']) {
$tpl->set('{foto}', $row['foto']);
} else
$tpl->set('{foto}', $config['http_home_url'] . "uploads/fotos/" . $row['foto']);
} else
$tpl->set('{foto}', $config['http_home_url'] . 'templates/' . $config['skin'] . "/dleimages/noavatar.png");
$tpl->set('{gravatar}', '');
}
В /engine/modules/iChat/ajax/add.php замените
if( $is_logged ) $db->query( "INSERT INTO " . PREFIX . "_iChat (date, author, email, message, ip, user_group) values ('$time', '{$member_id['name']}', '{$member_id['email']}', '$message', '$_IP', '{$member_id['user_group']}' )" );
На
if( $is_logged ) $db->query( "INSERT INTO " . PREFIX . "_iChat (date, author, email, message, ip, user_group, foto) values ('$time', '{$member_id['name']}', '{$member_id['email']}', '$message', '$_IP', '{$member_id['user_group']}' , '{$member_id['foto']}')" );
В шаблоне выводить автарку тегом
{foto}
Вставляем первой строкой в файл /templates/шаблон/iChat/skin.tpl
<script>
document.onkeyup = function (e) {
e = e || window.event;
if (e.keyCode === 13) {
iChatAdd('site');
}
return false;
}
</script>
Также если вы используете кнопку для открытия чата, вставляйте этот же код в файл /templates/шаблон/iChat/widnow_skin.tpl
Рекомендую удалить строки, иначе при нажатии ctrl+enter будет отправляться сообщение 2 раза и будет выводится ошибка о повторе сообщения
<script language="javascript" type="text/javascript">
<!--
$("textarea[name='message']").keypress(function(e) {
if((e.ctrlKey) && ((e.keyCode == 0xA)||(e.keyCode == 0xD))) {
iChatAdd('site'); return false;
}
});
//-->
</script>
Открываем файл engine/modules/iChat/ajax ищем там:
if( dle_strlen( stripslashes($message), $config['charset'] ) > $chat_cfg['max_text'] ) { $error = $chat_lang['max'];}
После этого кода вставляем следующее:
$aFilterMessage = array('секс','porno','http','url','org','ru','com','net');foreach($aFilterMessage as $sWord){ if (stripos($_POST['message'],$sWord)!==false) $bStopSpam = true;}$aFilterNames = array('Download');foreach($aFilterNames as $sName){ if ($name==$sName) $bStopSpam = true;}if ($bStopSpam === true){ $error = 'Сработал анти-спам фильтр. Пожалуйста, прекратите!';}
В массив $aFilterMessage вписываем ваши стоп слова при необходимости, и ещё можно расширить и массив $aFilterNames
Реализовать подобный антиспам, чтобы работал только для определённых групп пользователей? Допустим если администратору нужно публиковать в чате ссылки, то добавляем следующий код
$FilterMessage = array('секс','http', 'url','org','ru','com','net');foreach($FilterMessage as $Word){if (stripos($_POST['message'],$Word)!==false)$StopSpam = true;}if ($member_id['user_group'] == 1){$StopSpam = false;}if ($StopSpam === true){$error = 'Сработал анти-спам фильтр. Пожалуйста, прекратите!';}
В engine/modules/iChat/ajax/add.php найти
if (md5($_POST['message']) == md5($_SESSION['last_message'])) {
Выше добавить
preg_match_all('/[(b|i|u|s|code|quote|color=([^]]+)|quote=([^]]+))]/is', $message, $count_start_tag);
preg_match_all('/[/(b|i|u|s|code|quote|color|quote)]/is', $message, $count_end_tag);
if( count($count_start_tag[0]) != count($count_end_tag[0]) ) $error = "Сообщения содержит незакрытые теги.";
Открыть /templates/шаблон/iChat/js/action.js найти
function iChatDelete(id,place)
{
DLEconfirm( dle_del_agree, dle_confirm, function () {
iShowLoading('');
$.post(dle_root + "engine/modules/iChat/ajax/delete.php", { id: id, place: place }, function(data){
iHideLoading('');
if(place != 'history'){
$("#iChat-messages").hide('slide',{ direction: "left" }, 500).html(data).show('slide',{ direction: "right" }, 500);
}else{
$("#history_c").hide('slide',{ direction: "left" }, 500).html(data).show('slide',{ direction: "right" }, 500);
reFreshiChat();
}
});
return false;
} );
};
Заменить на
function iChatDelete(id,place)
{
DLEconfirm( dle_del_agree, dle_confirm, function () {
iShowLoading('');
$.post(dle_root + "engine/modules/iChat/ajax/delete.php", { id: id, place: place }, function(data){
iHideLoading('');
if(place != 'history'){
$("#iChat-messages").hide('slide',{ direction: "left" }, 500).html(data).show('slide',{ direction: "right" }, 500);
}else{
$("#history_c").hide('slide',{ direction: "left" }, 500).html(data).show('slide',{ direction: "right" }, 500);
}
reFreshiChat();
});
return false;
} );
};
Смайлики дл чата KOLOBOK
В набор состоит из 63 смайлов в стиле KOLOBOK и находится в архиве smiles.rar
Дополнительная локализация модуля iChat 6.0 для DLE 10.6 by SX2. Здесь вы найдете три языка Русский, Украинский, Английский, который находится в архиве language.rar.
Вместо SQL Lite лучше использовать MySQL или сделать хранение сообщений в файле, это решило бы все проблемы для обычных юзеров с SQLite, т.к. в 2015 использовать SQL Lite уже не комфильно.
Автор предыдущих версий: RooTM
Автор данной адаптации: SX2
Скачать СP1251 и UTF8
модули для DLE iChat 6.0 с нашего сайта по следующей ссылке
iChat-6.0-DLE-adaptation-by-sx2_cp1251_utf8.rar [843,66 Kb] (cкачиваний: 724)