Мини-чат на ajax

Статус
В этой теме нельзя размещать новые ответы.
L

logon

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

PHP:
CREATE TABLE IF NOT EXISTS `bb_shout` (
  `shout_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `shout_username` varchar(25) CHARACTER SET cp1251 NOT NULL DEFAULT '',
  `shout_user_id` mediumint(8) NOT NULL DEFAULT '0',
  `shout_group_id` mediumint(8) NOT NULL DEFAULT '0',
  `shout_session_time` int(11) NOT NULL DEFAULT '0',
  `shout_ip` char(8) CHARACTER SET cp1251 NOT NULL DEFAULT '',
  `shout_text` varchar(1000) CHARACTER SET cp1251 NOT NULL,
  `shout_active` mediumint(8) NOT 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(!$message) ajax_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'] > 0 && ( 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) {
      e = 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 {
    margin: 3px;
    padding: 4px;
    border: solid 1px #AED7FF;
    background-color: #F9FCFF;
  }
  textarea.chat_message {
    height: 40px; width: 200px;
    border-radius: 0px;
    -moz-border-radius: 0px;
    font-size: 11px;
  }
  .chat_btn {
    border: 1px solid #0080FF;
    padding: 2px;
    background-color: #F9FCFF;
    font-size: 10px;
    font-weight: bold;
  }
  .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 ---
да чуть не забыл , ббкод'ы были удалены , кто захочет тот поставит себе их
 

druid

Пользователь
#2
забыл добавить про lang_main.php
$lang['shoutbox_insert_name'] = 'Вставить имя пользователя';

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

logon

Гость
#3
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) {
      e = 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 {
    margin: 3px;
    padding: 4px;
    border: solid 1px #AED7FF;
    background-color: #F9FCFF;
  }
  textarea.chat_message {
    height: 40px; width: 200px;
    border-radius: 0px;
    -moz-border-radius: 0px;
    font-size: 11px;
  }
  .chat_btn {
    border: 1px solid #0080FF;
    padding: 2px;
    background-color: #F9FCFF;
    font-size: 10px;
    font-weight: bold;
  }
  .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>
 
L

logon

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

AnSan

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