Чат

Чат 1.2.0

Нет прав для скачивания
Совместимость
проверялся на совместимость
Изменения в БД
требуются
Автор
_Xz_
Общественное достояние
да
Описание: добавляет чат с большим числом возможностей.
Инструкция по установке
PHP:
-- 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
+ вставить в удобное место
<!-- 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;" />&nbsp;&nbsp;
                        <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" />&nbsp;
                        <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;" />&nbsp;
                        <input type="button" value="{L_QUOTE_SEL}" name="quoteselected" title="{L_QUOTE_SELECTED}" onmouseout="bbcode.refreshSelection(false);" onmouseover="bbcode.refreshSelection(true);" onclick="bbcode.onclickQuoteSel();" />&nbsp;
                    </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();">&nbsp;X&nbsp;</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;">&nbsp;:)&nbsp;</span>
                        <!-- IF IS_AM --><span title="Удалялка" id="submit_chat" onclick="del_message_chat();">&#8224;</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 -->

-- bbcode.php
+ в самый конец
function bbcode_chat ($text)
{
    global $bbcode;

    if (!isset($bbcode))
    {
        $bbcode = new bbcode();
    }
    $text = $bbcode->new_line2html($text);
    $text = $bbcode->make_clickable($text);
    $text = $bbcode->smilies_pass($text);

    return ($text);
}

-- 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':
        require(INC_DIR .'bbcode.php');
    break;
+ заменить на
switch ($ajax->action)
{
    case 'chat':
    case 'view_post':
        require(INC_DIR .'bbcode.php');
    break;
- найти
        'view_post'         => array('guest'),
+ после вставить
        'chat'              => array('guest'),
- найти
    function manage_user()
    {
        require(AJAX_DIR .'manage_user.php');
    }
+ после вставить
    function chat()
    {
        require(AJAX_DIR .'chat.php');
    }
  • 115.9 KB Просмотры: 609
Автор
Exile
Скачивания
156
Первый выпуск
Обновление
Оценка
5.00 звёзд 2 оценок

Другие ресурсы пользователя Exile

Последние обновления

  1. Обновление 1.1.0

    Адаптированная под последние ревизии версия, спасибо @dredd
  2. Обновление 1.1.0

    Версия с адаптацией от @Virtuoz
Сверху