- Совместимость
- проверялся на совместимость
- Изменения в БД
- требуются
- Автор
- _Xz_
- Общественное достояние
- да
Описание: добавляет возможность оставлять записи в профиле пользователя.
- Инструкция по установке
-
PHP:
/*********************************/ config.php в конец добавить: $bb_cfg['chat_message'] = 25; в viewprofile.php найти: // // Generate page // после вставить: if (!$sql = CACHE('bb_cache')->get("user_comments_{$profiledata['user_id']}")) { $sql = DB()->fetch_rowset("SELECT c.*, u.username, u.user_rank, u.avatar_ext_id, u.user_opt FROM bb_user_comments c LEFT JOIN ". BB_USERS ." u ON(u.user_id = c.user_id) WHERE c.type_id = {$profiledata['user_id']} ORDER BY c.id DESC LIMIT {$bb_cfg['chat_message']}"); CACHE('bb_cache')->set("user_comments_{$profiledata['user_id']}", $sql); } if(!$sql) { $message = '<div class="tCenter row2 chat-comment"><span style="font-size: 11px;">Никто ещё не оставил комментарий, может быть это сделаете вы?</span></div>'; $template->assign_block_vars('comments', array( 'TEXT' => $message, )); } else { foreach($sql as $row) { $message = '<div class="row2 chat-comment" id="pp_'. $row['id'] .'"><div style="min-height: 32px;">'; $message .= ($row['user_id'] == GUEST_UID) ? '' : '<a href="'. make_url(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('comments', array( 'TEXT' => $message, )); } } $template->assign_vars(array( 'COMMENT_ID' => (int) @$sql[0]['id'], 'COUNT_COMMENT' => count($sql), )); в usercp_viewprofile.tpl найти <!-- IF SHOW_SEARCH_DL --> <div class="tCenter"> <a class="gen" href="{U_SEARCH}?dlu={PROFILE_USER_ID}&dlw=1">{L_SEARCH_DL_WILL_DOWNLOADS}</a> :: <a class="gen" href="{U_SEARCH}?dlu={PROFILE_USER_ID}&dlc=1">{L_SEARCH_DL_COMPLETE_DOWNLOADS}</a> </div> <!-- ENDIF --> после вставить <script type="text/javascript"> var comment_id = {COMMENT_ID}; ajax.callback.comments = function(data) { if(data.up) $('#chat').scrollTop(0); if(data.clear) { $('.chat_message').attr('value', ''); get_message_comments(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) comment_id = data.id; }; setInterval(function(){ get_message_comments(0); }, 60000); function get_message_comments(up){ ajax.exec({action: 'comments', table: 'user', mode: 'select', id: comment_id, type_id: {PROFILE_USER_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 : 'comments', table: 'user', type_id: {PROFILE_USER_ID}, 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 : 'comments', mode : 'edit', post_id : post_id, text : text, type_id : {PROFILE_USER_ID}, table : 'user', 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 : 'comments', table: 'user', type_id: {PROFILE_USER_ID}, 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;<!-- IF COUNT_COMMENT > 3 --> height: 300px;<!-- ENDIF --> } .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> <div class="tCenter"> <form class="menu" name="post"> <textarea class="chat_message w90" id="message" onkeydown="submit_click(event)"></textarea> <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_comments(1);" src="/images/pic_loading.gif"> </div> <div class="clear"></div> <div class="spacer_2"></div> <div class="tLeft w100" id="chat"> <!-- BEGIN comments -->{comments.TEXT}<!-- END comments --> </div> </form> </div> -- 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); } -- sql CREATE TABLE IF NOT EXISTS `bb_user_comments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `type_id` int(11) NOT NULL DEFAULT '0', `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 'comments': case 'view_post': require(INC_DIR .'bbcode.php'); break; - найти 'view_post' => array('guest'), + после вставить 'comments' => array('guest'), - найти function manage_user() { require(AJAX_DIR .'manage_user.php'); } + после вставить function comments() { require(AJAX_DIR .'comments.php'); } -- comments.php закинуть в папку library/ajax/