- Совместимость
- проверялся на совместимость
- Изменения в БД
- требуются
- Автор
- _Xz_
- Общественное достояние
- да
Описание: добавляет чат с большим числом возможностей.
- Инструкция по установке
-
PHP:
Файл chat.php поместить в library/ajax. ---------------------------------------------------- -- index.php - найти $user->session_start(); + после вставить $page_cfg['include_bbcode_js'] = true; if($bb_cfg['chat']) { if (!$sql = CACHE('bb_cache')->get('chat')) { $sql = DB()->fetch_rowset("SELECT c.*, u.username, u.user_rank, u.avatar_ext_id, u.user_opt FROM bb_chat c LEFT JOIN ". BB_USERS ." u ON(u.user_id = c.user_id) ORDER BY c.id DESC LIMIT {$bb_cfg['chat_message']}"); CACHE('bb_cache')->set('chat', $sql); } foreach($sql as $row) { $message = '<div class="row1 chat-comment" id="pp_'. $row['id'] .'"><div style="min-height: 32px;">'; $message .= ($row['user_id'] == GUEST_UID) ? '' : '<a href="'. PROFILE_URL . $row['user_id'] .'">'; $message .= str_replace('<img', '<img align="left" height="32" width="32" style="padding-right: 3px;"', get_avatar($row['user_id'], $row['avatar_ext_id'], !bf($row['user_opt'], 'user_opt', 'dis_avatar'))); $message .= ($row['user_id'] == GUEST_UID) ? '' : '</a>'; if(IS_AM) { $message .= '<input onclick="set_hid_chbox('. $row['id'] .');" class="floatR chat-post" type="checkbox" value="'. $row['id'] .'" />'; $message .= '<span onclick="edit_comment('. $row['id'] .'); return false;" class="txtb floatR">[p]</span>'; } $title_ip = (IS_ADMIN) ? decode_ip($row['ip']) : 'Ник в чат'; $message .= '<a href="#" class="bold" title="'. $title_ip .'" onclick="add_nick(\'[n]'. $row['username'] .'[/n]\'); return false;">'. str_replace('title="', 'data="', profile_url(array('username' => $row['username'], 'user_rank' => $row['user_rank']))) .'</a><div class="small">'. bb_date($row['time']) .'</div></div>'; $message .= '<div class="spacer_2"></div><span style="font-size: 11px;">'. $row['text_html'] .'</span></div>'; $message .= (IS_AM) ? '<span id="pe_'. $row['id'] .'"></span>' : ''; $template->assign_block_vars('chat', array( 'TEXT' => $message, )); } $template->assign_vars(array( 'CHAT_ID' => (int) @$sql[0]['id'], )); } ---------------------------------------------------- -- page_header.tpl + вставить в удобное место (Желательно внутри <!--sidebar1-->) <!-- IF $bb_cfg['chat'] --> <script type="text/javascript"> var id = {CHAT_ID}; ajax.callback.chat = function(data) { if(data.up) $('#chat').scrollTop(0); if(data.clear) { $('.chat_message').attr('value', ''); get_message_chat(1); } <!-- IF IS_AM --> else if(data.del) { for(i=0; i < data.del.length; i++) { $('#pp_'+ data.del[i]).hide(); } }else if(data.html){ $('#pp_'+ data.post_id).show().html(data.html); initPostBBCode('#pp_'+ data.post_id); $('#pe_'+ data.post_id).hide(); ajax.open = false; } else if(data.text){ ajax.open = data.post_id; $('#pe_'+ data.post_id).html(data.text); } <!-- ENDIF --> else { if(data.message) $('#chat').prepend(data.message); initPostBBCode('#chat'); } if(data.id) id = data.id; }; setInterval(function(){ get_message_chat(0); }, 25000); function get_message_chat(up){ ajax.exec({action : 'chat', mode: 'select', id: id, up: up}); } function submit_click(e) { e = e || window.event; if (e.keyCode == 13 && e.ctrlKey) { submit_chat(); }; } function submit_chat(){ var message = $('.chat_message').val(); if (message.length < 3) { alert('Вы должны ввести текст сообщения'); $('.chat_message').focus(); return false; } ajax.exec({action : 'chat', mode: 'insert', message: message}); } function add_nick(text){ var message = $('.chat_message').val(); $('.chat_message').attr('value', message + text +' '); $('.chat_message').focus(); } </script> <!-- IF IS_AM --> <script type="text/javascript"> ajax.open = false; function edit_comment (post_id, text, type) { if(ajax.open && ajax.open != post_id) { alert('У вас уже открыто одно быстрое редактирование!'); } else{ if(ajax.open && !text){ $('#pp_'+ post_id).show(); $('#pe_'+ post_id).hide(); } else{ $('#pp_'+ post_id).hide(); $('#pe_'+ post_id).show(); ajax.exec({ action : 'chat', mode : 'edit', post_id : post_id, text : text, type : type }); } ajax.open = false; } } function del_message_chat(){ if(!confirm('Вы уверены, что хотите удалить эти сообщения?')) return false; var ids = 0; $('input.chat-post:checked').each(function(){ ids += ','+ this.value; }); if(!ids) alert('Вы не выбрали сообщения.'); else ajax.exec({action : 'chat', mode: 'delete', ids: ids}); } function set_hid_chbox(id) { $('#pp_'+ id).toggleClass('hl-selected-post'); return false; } </script> <!-- ENDIF --> <style type="text/css"> #chat { overflow: auto; height: 300px; } .chat-comment { margin: 3px; padding: 4px; border: solid 1px #b7c0c5; border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; } textarea.chat_message { height: 40px; margin: 4px; border-radius: 0px; -moz-border-radius: 0px; -webkit-border-radius: 0px; font-size: 11px; } #submit_chat { border: 1px solid #b7c0c5; padding: 2px; background-color: #EFEFEF; font-size: 10px; font-weight: bold; } #submit_chat:hover { color: #0080FF; } </style> <h3>Мини чат</h3> <div class="tCenter"> <form name="post"> <textarea class="chat_message w90" id="message" onkeydown="submit_click(event)"></textarea> <div class="buttons mrg_4"> <input type="button" value="B" name="codeB" title="{L_BOLD}" style="font-weight: bold; width: 30px;" /> <input type="button" value="i" name="codeI" title="{L_ITALIC}" style="width: 30px; font-style: italic;" /> <input type="button" value="u" name="codeU" title="{L_UNDERLINE}" style="width: 30px; text-decoration: underline;" /> <input type="button" value="s" name="codeS" title="{L_STRIKEOUT}" style="width: 30px; text-decoration: line-through;" /> <input type="button" value="{L_QUOTE}" name="codeQuote" title="{L_QUOTE_TITLE}" style="width: 57px;" /> <input type="button" value="Img" name="codeImg" title="{L_IMG_TITLE}" style="width: 40px;" /> <input type="button" value="{L_URL}" name="codeUrl" title="{L_URL_TITLE}" style="width: 63px; text-decoration: underline;" /> <input type="hidden" name="codeUrl2" /> <input type="button" value="{L_CODE}" name="codeCode" title="{L_CODE_TITLE}" style="width: 43px;" /> <input type="button" value="{L_LIST}" name="codeList" title="{L_LIST_TITLE}" style="width: 60px;" /> <input type="button" value="1." name="codeOpt" title="{L_LIST_ITEM}" style="width: 30px;" /> <input type="button" value="{L_QUOTE_SEL}" name="quoteselected" title="{L_QUOTE_SELECTED}" onmouseout="bbcode.refreshSelection(false);" onmouseover="bbcode.refreshSelection(true);" onclick="bbcode.onclickQuoteSel();" /> </div> <script type="text/javascript"> var bbcode = new BBCode("message"); var ctrl = "ctrl"; bbcode.addTag("codeB", "b", null, "B", ctrl); bbcode.addTag("codeI", "i", null, "I", ctrl); bbcode.addTag("codeU", "u", null, "U", ctrl); bbcode.addTag("codeS", "s", null, "S", ctrl); bbcode.addTag("codeQuote", "quote", null, "Q", ctrl); bbcode.addTag("codeImg", "img", null, "R", ctrl); bbcode.addTag("codeUrl", "url", "/url", "", ctrl); bbcode.addTag("codeUrl2", "url=", "/url", "W", ctrl); bbcode.addTag("codeCode", "code", null, "K", ctrl); bbcode.addTag("codeList", "list", null, "L", ctrl); bbcode.addTag("codeOpt", "*", "", "0", ctrl); </script> <div class="floatR pad_4"> <span title="Оправить (Ctrl+Enter)" id="submit_chat" onclick="submit_chat(); return false;">Отправить</span> <span title="Очистить" id="submit_chat" onclick="$('.chat_message').attr('value', ''); $('.chat_message').focus();"> X </span> <span title="Смайлы" id="submit_chat" onclick="window.open('posting.php?mode=smilies', '_phpbbsmilies', 'height=540, resizable=yes, scrollbars=yes ,width=620, left=360, top=60'); return false;"> :) </span> <!-- IF IS_AM --><span title="Удалялка" id="submit_chat" onclick="del_message_chat();">†</span><!-- ENDIF --> <img title="Обновить чат" onclick="get_message_chat(1);" src="/styles/images/pic_loading.gif"> </div> <div class="clear"></div> <div class="spacer_2"></div> <div class="tLeft w100" id="chat"> <!-- BEGIN chat -->{chat.TEXT}<!-- END chat --> </div> </form> </div> </div> <div class="cat_separator"></div> <!-- ENDIF --> ---------------------------------------------------- -- config.php + в самый конец $bb_cfg['chat'] = true; $bb_cfg['chat_message'] = 50; ---------------------------------------------------- -- sql CREATE TABLE `bb_chat` ( `id` int(11) NOT NULL auto_increment, `user_id` int(11) NOT NULL default '0', `time` int(11) NOT NULL default '0', `text` text NOT NULL, `text_html` text NOT NULL, `ip` char(32) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; ---------------------------------------------------- -- ajax.php - найти switch ($ajax->action) { case 'view_post': case 'posts': case 'post_mod_comment': require INC_DIR . '/bbcode.php'; break; + заменить на switch ($ajax->action) { case 'chat': case 'view_post': case 'posts': case 'post_mod_comment': require INC_DIR . '/bbcode.php'; break; ---------------------------------------------------- -- src/Ajax.php - найти 'view_post' => ['guest'], + после вставить 'chat' => ['guest'], - найти public function manage_user() { require AJAX_DIR . '/manage_user.php'; } + после вставить public function chat() { require AJAX_DIR . '/chat.php'; } ----------------------------------------------------