- Совместимость
- проверялся на совместимость
- Изменения в БД
- не требуются
- Автор
- dredd
- Общественное достояние
- нет
Описание: добавляет вывод последних 10 сообщений с форума.
Что умеет:
Что умеет:
- Перелистывание сообщений (AJAX)
- Полное кеширование
- Автообновление раз в 10 минут (устанавливается из конфига)
- Предпросмотр сообщения (AJAX)
- Инструкция по установке
-
Открываем ajax.php и находим:
PHP:'view_post' => array('guest'),
PHP:'new_messages' => array('guest'),
PHP:function sitemap() { require(AJAX_DIR .'sitemap.php'); }
PHP:function new_messages() { global $bb_cfg; if(!$bb_cfg['new_messages']['enabled']) $this->ajax_die('Модуль отключён.'); $type = (int) $this->request['type']; $limit = $type * $bb_cfg['new_messages']['limit']; if (!$sql = CACHE('bb_cache')->get('new_messages_limit'.$limit.'')) { $sql = DB()->fetch_rowset("SELECT t.*, p.*, h.post_html, IF(h.post_html IS NULL, pt.post_text, NULL) AS post_text, IF(p.poster_id = " . GUEST_UID . ", p.post_username, u.username) AS username, u.user_id, u.user_rank, u.avatar_ext_id, u.user_opt FROM " . BB_POSTS . " p INNER JOIN " . BB_TOPICS . " t ON(t.topic_id = p.topic_id) INNER JOIN " . BB_POSTS_TEXT . " pt ON(pt.post_id = p.post_id) LEFT JOIN " . BB_POSTS_HTML . " h ON(h.post_id = pt.post_id) INNER JOIN " . BB_USERS . " u ON(u.user_id = p.poster_id) WHERE " . TIMENOW . " > p.post_time AND p.post_id <> t.topic_id AND p.poster_id <> " . BOT_UID . " AND t.topic_first_post_id <> p.post_id AND t.topic_last_post_id = p.post_id ORDER BY p.post_id DESC LIMIT $limit,{$bb_cfg['new_messages']['limit']}"); CACHE('bb_cache')->set('new_messages_limit'.$limit.'', $sql, $bb_cfg['new_messages']['cache']*60); } $message = ($type) ? '<h3><span onclick="ajax.new_messages('.($type - 1).'); return false;" href="#" title="Предыдущие '.$bb_cfg['new_messages']['limit'].' сообщений" class="clickable floatL" id="submit_chat">«</span> <span style="float: center;">Новые сообщения</span> <span title="Следующие '.$bb_cfg['new_messages']['limit'].' сообщений" id="submit_chat" class="clickable floatR" href="#" onclick="ajax.new_messages('.($type + 1).'); return false;">»</span><br></h3>' : '<h3><span style="float: center;">Новые сообщения</span><span title="Следующие '.$bb_cfg['new_messages']['limit'].' сообщений" id="submit_chat" class="clickable floatR" href="#" onclick="ajax.new_messages('.($type + 1).'); return false;">»</span></h3>'; $message .= '<div class="avatarssList"><ul>'; foreach($sql as $row) { $message .= '<li rel="viewpost.php?id='. $row['post_id'] .'" class="jsTip" jtip="true" name="'. $row['topic_title'] .'" id="post_'. $row['post_id'] .'">'; $message .= '<a class="avatarss" data-avatarhtml="true" href="'. PROFILE_URL . $row['user_id'] .'">'.str_replace('<img', '<img height="32" width="32"', get_avatar($row['user_id'], $row['avatar_ext_id'], !bf($row['user_opt'], 'user_opt', 'dis_avatar'))).'</a>'; $message .= '<a href="'. POST_URL . $row['post_id'] .'#'. $row['post_id'] .'">'.wbr(str_short($row['topic_title'], 20)).'</a>'; $message .= '<div class="userTitle">'; $message .= ''.profile_url(array('user_id' => $row['user_id'], 'username' => $row['username'], 'user_rank' => $row['user_rank'])).' ответил <abbr class="DateTime">'.bb_date($row['post_time']).'</abbr>'; $message .= '</div></li>'; } $message .= '</ul></div></div>'; $this->response['html'] = $message; }
PHP:// Latest news if ($bb_cfg['show_latest_news'])
PHP://New messages if($bb_cfg['new_messages']['enabled']) { if (!$sql = CACHE('bb_cache')->get('new_messages_limit0')) { $sql = DB()->fetch_rowset("SELECT t.*, p.*, h.post_html, IF(h.post_html IS NULL, pt.post_text, NULL) AS post_text, IF(p.poster_id = " . GUEST_UID . ", p.post_username, u.username) AS username, u.user_id, u.user_rank, u.avatar_ext_id, u.user_opt FROM " . BB_POSTS . " p INNER JOIN " . BB_TOPICS . " t ON(t.topic_id = p.topic_id) INNER JOIN " . BB_POSTS_TEXT . " pt ON(pt.post_id = p.post_id) LEFT JOIN " . BB_POSTS_HTML . " h ON(h.post_id = pt.post_id) INNER JOIN " . BB_USERS . " u ON(u.user_id = p.poster_id) WHERE " . TIMENOW . " > p.post_time AND p.post_id <> t.topic_id AND p.poster_id <> " . BOT_UID . " AND t.topic_first_post_id <> p.post_id AND t.topic_last_post_id = p.post_id ORDER BY p.post_id DESC LIMIT 0,{$bb_cfg['new_messages']['limit']}"); CACHE('bb_cache')->set('new_messages_limit0', $sql, $bb_cfg['new_messages']['cache']*60); } foreach($sql as $row) { $message = '<li rel="viewpost.php?id='. $row['post_id'] .'" class="jsTip" jtip="true" name="'. $row['topic_title'] .'" id="post_'. $row['post_id'] .'">'; $message .= '<a class="avatarss" data-avatarhtml="true" href="'. PROFILE_URL . $row['user_id'] .'">'.str_replace('<img', '<img height="32" width="32"', get_avatar($row['user_id'], $row['avatar_ext_id'], !bf($row['user_opt'], 'user_opt', 'dis_avatar'))).'</a>'; $message .= '<a href="'. POST_URL . $row['post_id'] .'#'. $row['post_id'] .'">'.wbr(str_short($row['topic_title'], 20)).'</a>'; $message .= '<div class="userTitle">'; $message .= ''.profile_url(array('user_id' => $row['user_id'], 'username' => $row['username'], 'user_rank' => $row['user_rank'])).' ответил <abbr class="DateTime">'.bb_date($row['post_time']).'</abbr>'; $message .= '</div></li>'; $template->assign_block_vars('messages', array( 'POST' => $message, )); } }
PHP:$bb_cfg['new_messages'] = array( 'enabled' => true, 'limit' => 10, 'cache' => 5, //время указывается в минутах );
открыть page_footer.tpl и найти:
HTML:<!-- IF HTML_SIDEBAR_2 -->
HTML:<!-- IF $bb_cfg['new_messages']['enabled'] --> <link rel="stylesheet" href="{TPL_DIR}/jstip.css?v={$bb_cfg['css_ver']}" type="text/css"> <script type="text/javascript" src="{SITE_URL}styles/js/jstip.js"></script> <script type="text/javascript"> ajax.new_messages = function($type) { ajax.exec({ action : 'new_messages', type : $type }); }; ajax.callback.new_messages = function(data) { $('#new_messages').html(data.html); }; </script> <div class="section"> <div class="secondaryContent" id="new_messages"> <h3>Новые сообщения <span title="Перелистнуть сообщения" id="submit_chat" class="clickable floatR" href="#" onclick="ajax.new_messages(1); return false;">»</span></h3> <div class="avatarssList"> <ul> <!-- BEGIN messages --> {messages.POST} <!-- END messages --> </ul> </div> </div> </div> <!-- ENDIF -->
открыть main.css и найти:
HTML:#sidebar2-wrap {}
HTML:abbr, acronym { border: 0; font-variant: normal; } #sidebar2 .avatarssList li { margin: 5px 0; overflow: hidden; zoom: 1; } #sidebar2 .avatarssList .avatarss { margin-right: 5px; float: left; width: 32px; height: 32px; width: auto; height: auto; } #sidebar2 .avatarssList .userTitle { color: rgb(150,150,150); } .avatarss img, .avatarss .img, .avatarssCropper { background-color: rgb(252,252,255); padding: 2px; border: 1px solid #a5cae4; -webkit-border-radius: 4px; -moz-border-radius: 4px; -khtml-border-radius: 4px; border-radius: 4px; }