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

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

Совместимость
проверялся на совместимость
Изменения в БД
не требуются
Автор
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.png
    1.png
    148.8 KB · Просмотры: 400
  • 2.png
    2.png
    125.8 KB · Просмотры: 394
  • 3.png
    3.png
    158.3 KB · Просмотры: 338
Автор
dredd
Скачивания
80
Просмотры
372
Первый выпуск
Обновление
Оценка
5.00 звёзд 1 оценок

Другие ресурсы пользователя dredd

Последние обновления

  1. Обновление 0.5.5

    Обновлена инструкция по установке. Мелкие правки. Вывод последнего сообщения с поста (аля XenForo)
  2. Обновление 0.5.4

    Обновлена инструкция по установке. Вывод только новых сообщений. Коррекция предпросмотра.
  3. Обновление 0.5.3

    Обновлено описание ресурса Добавление предпросмотра Мелкие правки
  4. Обновление 0.5.2

    Обновлено описание ресурса Добавлена возможность установки количества сообщений
  5. Обновление 0.5.1

    Обновлено описание ресурса Перепаковка в .zip
Сверху