Мини-чат на ajax

Тема в разделе "Модификации для TorrentPier (архив)", создана пользователем logon, 7 июл 2011.

Статус темы:
Закрыта.
  1. logon

    logon Гость

    #############################################################
    ## Название мода: Мини Чат на аякс / Mini Chat [ajax]
    ##Описание: это миничат который написанн на PHP и JavaScript , с использованием технологий Ajaxдля обмена данными,
    ## без необходимости перезагружать страницу.
    ## Используется база MySQL. Минимальная нагрузка на сервер (всё кешируется) поддержка смайлов,
    ## всех ббкодов и прочие функции..
    ## Внешне похож на чат с анимешки
    ##Сложность: легко
    ##Время установки: 3 мин
    #############################################################
    SQL

    PHP:
    CREATE TABLE IF NOT EXISTS `bb_shout` (
      `
    shout_idmediumint(8unsigned NOT NULL AUTO_INCREMENT,
      `
    shout_usernamevarchar(25CHARACTER SET cp1251 NOT NULL DEFAULT '',
      `
    shout_user_idmediumint(8NOT NULL DEFAULT '0',
      `
    shout_group_idmediumint(8NOT NULL DEFAULT '0',
      `
    shout_session_timeint(11NOT NULL DEFAULT '0',
      `
    shout_ipchar(8CHARACTER SET cp1251 NOT NULL DEFAULT '',
      `
    shout_textvarchar(1000CHARACTER SET cp1251 NOT NULL,
      `
    shout_activemediumint(8NOT NULL DEFAULT '0',
      
    KEY `shout_id` (`shout_id`)
    );
    Открываем и добавляем Ajax.php
    PHP:
    case 'chat_message':
            require(
    INC_DIR .'functions_post.php');
            require(
    INC_DIR .'bbcode.php');
        break;
    PHP:
    'chat_message'      => array('user'),
    PHP:
    function chat_message()
        {
            global 
    $bb_cache$userdata$bb_cfg$lang;
            
    $mode = (int) $this->request['mode'];
            
    $message = (string) @$this->request['message'];

            if(
    $mode==1)
            {
                if(!
    $messageajax_die($lang['shoutbox_err']);
                
    $bbcode_on $bb_cfg['allow_bbcode'];
                
    $smilies_on $bb_cfg['allow_smilies'];
                if(!
    IS_ADMIN)
                {
                    
    $chk DB()->fetch_row('SELECT MAX(shout_session_time) AS last_post_time FROM bb_shout WHERE shout_user_id = '.$userdata['user_id']);
                    if ( 
    $chk['last_post_time'] > && ( time() - $chk['last_post_time'] ) < $bb_cfg['flood_interval'] ) ajax_die($lang['flood_error']);
                }
                if (!empty(
    $message))
                {
                    
    DB()->query('INSERT INTO bb_shout (shout_text, shout_session_time, shout_user_id, shout_ip, shout_username) VALUES ("'.DB()->escape($message).'", '.time().', '.$userdata['user_id'].', "'.USER_IP.'", "'.DB()->escape($userdata['username']).'")');
                    
    CACHE('bb_cache')->rm('shout_data'60);
                }
            }
            if(!
    $shout_data CACHE('bb_cache')->get('shout_data'60))
            {
                
    $shout_rows DB()->fetch_rowset("SELECT s.*, u.username, u.user_level, u.user_rank
                    FROM bb_shout s, "
    .BB_USERS." u
                    WHERE s.shout_user_id=u.user_id AND u.user_id = u.user_id
                    ORDER BY s.shout_session_time DESC LIMIT 50"
    );
                
    $i=0;
                
    $shout_data '';
                foreach (
    $shout_rows AS $shout_row)
                {
                    
    $row_class = !($i 2) ? 'row1' 'row2';
                    
    $user_level =  $shout_row['user_level'];
                    if(
    $user_level == ADMIN$username '<span class="colorAdmin">'.$shout_row['username'].'</span>' ;
                    else if(
    $user_level == MOD$username '<span class="colorMod">'.$shout_row['username'].'</span>';
                    else if(
    $user_level == GROUP_MEMBER$username '<span class="colorGroup">'.$shout_row['username'].'</span>';
                    else 
    $username '<span class="colorNick">'.$shout_row['username'].'</span>';

                    
    $shout = (!$shout_row['shout_active']) ? $shout_row['shout_text'] : $lang['Shout_censor'];
                    
    $shout str_replace("\n""\n<br />\n"$shout);
                    
    $shout = ($user_level == ADMIN) ? '<span class="colorAdmin">'.$shout.'</span>' $shout;

                    
    $shout_data .= '<div id="shout_'.$shout_row['shout_id'].'" class="chat-comment '.$row_class.'"><span style="font-size: 11px;">'.bb_date($shout_row['shout_session_time']).'&nbsp;<a class="bold" title="'.$lang['shoutbox_insert_name'].'" style="text-decoration: none;" href="javascript:add_nick(\'[b]'.addslashes($shout_row['shout_username']).'[/b]\')">'.$username.'</a>:</span>&nbsp;<span style="font-size: 11px;">'.$shout.'</span></div></div>';
                    ++
    $i;
                }
              
    CACHE('bb_cache')->set('shout_data'$shout_data);
            }
            
    $this->response['message'] = $shout_data;
        }
    Вывод чата на главную куда хотите хоть index.tpl хоть page_header.tpl

    PHP:
    <script type="text/javascript">
        
    ajax.chat_message = function(mode) {
          
    ajax.exec({
            
    action 'chat_message',
            
    mode mode,
            
    message : $('#message').val()
          });
        };
        
    ajax.callback.chat_message = function(data) {
          if(
    data.message)
          {
            $(
    '#chat').show();
            $(
    '#chat').html(data.message);
            
    initPostBBCode('#chat');
          }
        };
        function 
    submit_click(e) {
          
    || window.event;
          if (
    e.keyCode == 13 && e.ctrlKey) {
            
    submit_chat();
          };
        }
        function 
    add_nick(text){
          $(
    '#message').attr('value', $('#message').val() + text +' ');
          $(
    '#message').focus();
        }
        $(
    document).ready(function(){ajax.chat_message(2);});
        
    setInterval(function(){ajax.chat_message(2);}, 30000);
      </
    script>
      <
    style type="text/css">
      
    #chat { overflow: auto; width: 200px; height: 300px; }
      
    .chat-comment {
        
    margin3px;
        
    padding4px;
        
    bordersolid 1px #AED7FF;
        
    background-color#F9FCFF;
      
    }
      
    textarea.chat_message {
        
    height40pxwidth200px;
        
    border-radius0px;
        -
    moz-border-radius0px;
        
    font-size11px;
      }
      .
    chat_btn {
        
    border1px solid #0080FF;
        
    padding2px;
        
    background-color#F9FCFF;
        
    font-size10px;
        
    font-weightbold;
      }
      .
    chat_btn:hover color#0080FF; }
      
    </style>

      <
    div class="category">
        <
    h3 class="cat_title">Мини чат</h3>
          <
    div class="cat_footer"></div>
          <
    div class="f_tbl_wrap pad_4 tCenter">
            <
    form name="post">
            <
    textarea onkeydown="submit_click(event)" id="message" class="chat_message"></textarea>
            <
    div class="floatR pad_4">
              <
    span onclick="ajax.chat_message(1); $('#message').attr('value', '');$('#message').focus();" class="chat_btn">Отправить</span>
              <
    span onclick="$('#message').attr('value', ''); $('#message').focus();"  class="chat_btn">&nbsp;X&nbsp;</span>
              <
    span onclick="window.open('posting.php?mode=smilies', '_phpbbsmilies', 'height=540, resizable=yes, scrollbars=yes ,width=620'); return false;"  class="chat_btn">&nbsp;:)&nbsp;</span>
              <
    span onclick="ajax.chat_message(2); return false;"  class="chat_btn">Обновить</span>
            </
    div>
            <
    div class="clear"></div>
            <
    div class="spacer_2"></div>
            <
    div id="chat" class="tLeft hidden"></div>
            </
    form>
          </
    div>
        <
    div class="cat_footer"></div>

      </
    div>
    PS спасибо PheRum решение мелких багов
    --- добавлено: Jul 7, 2011 5:10 AM ---
    да чуть не забыл , ббкод'ы были удалены , кто захочет тот поставит себе их
     
    notebug, Erkin, DarkMod и ещё 1-му нравится это.
  2. druid

    druid Пользователь

    Сообщения:
    206
    Симпатии:
    119
    забыл добавить про lang_main.php
    $lang['shoutbox_insert_name'] = 'Вставить имя пользователя';

    и да - как убрать эту аяксовую надпись loading на зеленом фоне в правом верхнем углу? она у меня постоянно там висит.
     
  3. logon

    logon Гость

    druid, легко ,
    PHP:
    <script type="text/javascript">
        
    ajax.chat_message = function(mode) {
          
    ajax.exec({
            
    action 'chat_message',
            
    mode mode,
            
    message : $('#message').val()
          });
        };
        
    ajax.callback.chat_message = function(data) {
          if(
    data.message)
          {
            $(
    '#chat').show();
            $(
    '#message').attr('value''');
            $(
    '#chat').html(data.message);
            
    initPostBBCode('#chat');
          }
        };
        function 
    submit_click(e) {
          
    || window.event;
          if (
    e.keyCode == 13 && e.ctrlKey) {
            
    submit_chat();
          };
        }
        function 
    add_nick(text){
          $(
    '#message').attr('value', $('#message').val() + text +' ');
          $(
    '#message').focus();
        }
        $(
    document).ready(function(){ajax.chat_message(2);});
        
    setInterval(function(){ajax.chat_message(2);}, 30000);
      </
    script>
      <
    style type="text/css">
      
    #chat { overflow: auto; width: 200px; height: 300px; }
      
    .chat-comment {
        
    margin3px;
        
    padding4px;
        
    bordersolid 1px #AED7FF;
        
    background-color#F9FCFF;
      
    }
      
    textarea.chat_message {
        
    height40pxwidth200px;
        
    border-radius0px;
        -
    moz-border-radius0px;
        
    font-size11px;
      }
      .
    chat_btn {
        
    border1px solid #0080FF;
        
    padding2px;
        
    background-color#F9FCFF;
        
    font-size10px;
        
    font-weightbold;
      }
      .
    chat_btn:hover color#0080FF; }
      
    </style>

      <
    div class="category">
        <
    h3 class="cat_title">Мини чат</h3>
          <
    div class="cat_footer"></div>
          <
    div class="f_tbl_wrap pad_4 tCenter">
            <
    form name="post">
            <
    textarea onkeydown="submit_click(event)" id="message" class="chat_message"></textarea>
            <
    div class="floatR pad_4">
              <
    span onclick="ajax.chat_message(1); return false;" class="chat_btn">Отправить</span>
              <
    span onclick="$('#message').attr('value', ''); $('#message').focus();"  class="chat_btn">&nbsp;X&nbsp;</span>
              <
    span onclick="window.open('posting.php?mode=smilies', '_phpbbsmilies', 'height=540, resizable=yes, scrollbars=yes ,width=620'); return false;"  class="chat_btn">&nbsp;:)&nbsp;</span>
              <
    span onclick="ajax.chat_message(2); return false;"  class="chat_btn">Обновить</span>
            </
    div>
            <
    div class="clear"></div>
            <
    div class="spacer_2"></div>
            <
    div id="chat" class="tLeft hidden"></div>
            </
    form>
          </
    div>
        <
    div class="cat_footer"></div>
      </
    div
     
    pppk нравится это.
  4. Nikolaich

    Nikolaich Гость

    logon, автора, может, все же укажешь?
     
  5. logon

    logon Гость

    Nikolaich, А че никто не знает что ли ? Roman автор , а для TP II делал я адаптацию ,а помог с мелким багом PheRum
     
  6. druid

    druid Пользователь

    Сообщения:
    206
    Симпатии:
    119
    logon, надпись Loading... так и не убирается
     
  7. frost444

    frost444 Пользователь

    Сообщения:
    193
    Симпатии:
    58
    page_header.tpl
     
  8. PheRum

    PheRum Разработчик

    Сообщения:
    1.074
    Симпатии:
    480
    Версия TP:
    , иная
    DROP DROP DROP
     
  9. AnSan

    AnSan Пользователь

    Сообщения:
    82
    Симпатии:
    40
    Версия TP:
    нет
    При нажатии на кнопку отправить без сообщения
    Код:
    Fatal error: Call to undefined function ajax_die() in C:\nimp\htdocs\*****\ajax.php on line 176
     
  10. logon

    logon Гость

    Тут телепатов нету!Что на этой строчке ?:
     
Статус темы:
Закрыта.

Поделиться этой страницей