Новые сообщения AJAX 0.5.5

Добавляет вывод последних 10 сообщений с форума.

  1. dredd
    Совместимость:
    проверялся на совместимость
    Изменения в БД:
    не требуются
    Автор:
    dredd
    Общественное достояние:
    нет
    Описание: добавляет вывод последних 10 сообщений с форума.

    Что умеет:
    1. Перелистывание сообщений (AJAX)
    2. Полное кеширование
    3. Автообновление раз в 10 минут (устанавливается из конфига)
    4. Предпросмотр сообщения (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;">&raquo;</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;">&raquo;</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;
        }
    открыть index.php и найти:
    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,
            ));
        }
    }
    открыть config.php и в конец вставить:
    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;">&raquo;</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;
                }
    

    Изображения

    1. 1.png
    2. 2.png
    3. 3.png
    puhpol, Kryl и Exile нравится это.