ЛС без перезагрузки страницы

dredd

Пользователь
#1
Автор: frost444
Установка:
Создаем файл new_pm.php с содержимым:

PHP:
<?php
 
if (!defined('IN_AJAX')) die(basename(__FILE__));
 
global $lang, $userdata;
 
$unread_pm = 0;
if ($userdata['user_new_privmsg'] > 0)
{
    $pm_text = declension($userdata['user_new_privmsg'], $lang['NEW_PMS_DECLENSION'], $lang['NEW_PMS_FORMAT']);
    $unread_pm = ($userdata['user_new_privmsg'] > 0);
}
else if(!$unread_pm && $userdata['user_unread_privmsg'])
{
    $pm_text = declension($userdata['user_unread_privmsg'], $lang['UNREAD_PMS_DECLENSION'], $lang['UNREAD_PMS_FORMAT']);
}else{
    $pm_text = $lang['NO_NEW_PM'];
}
 
$this->response['html'] = $pm_text;
Копируем этот файл в папку ajax

Открываем файл ajax.php и находим:
PHP:
'gen_passkey'      => array('user'),
После вставляем:
PHP:
'new_pm'            => array('user'),
Находим:
PHP:
function index_data()
    {
require(AJAX_DIR .'index_data.php');
}
После вставляем:
PHP:
function new_pm()
    {
require(AJAX_DIR .'new_pm.php');
}
Открываем page_header.tpl и находим:

HTML:
<!-- IF HAVE_NEW_PM || HAVE_UNREAD_PM -->
<a href="{U_READ_PM}" class="new-pm-link"><b>{L_PRIVATE_MESSAGES}: {PM_INFO}</b></a>
<!-- ELSE -->
<a href="{U_PRIVATEMSGS}"><b>{L_PRIVATE_MESSAGES}: {PM_INFO}</b></a>
<!-- ENDIF -->
Заменяем на:

HTML:
<!-- IF LOGGED_IN --><script type="text/javascript">
            ajax.new_pm = function() {
                ajax.exec({
                    action  : 'new_pm',
                });
                ajax.callback.new_pm = function(data) {
                    $('#pm-link').html(data.html);
                };
            }
            setInterval("ajax.new_pm()",2*60*1000);
            </script><!-- ENDIF -->
<!-- IF HAVE_NEW_PM || HAVE_UNREAD_PM -->
          <a href="{U_PRIVATEMSGS}" id="pm-link">{PM_INFO}</a>
                <!-- ENDIF -->
 

frost444

Пользователь
#4
dredd, а стандартный аякс юзать не как? могу переделать, тут минуты 2, но после того как дома буду.
Да и вообще тут лишнего много, можно основной код сократить до 2-4 строк (на глаз)
 

dredd

Пользователь
#5
Я только адаптировал и не более) Буду признателен если переделаете.
 

frost444

Пользователь
#6
не выдержал на глаз накатал))
ajax.php
PHP:
        'new_pm'            => array('user'),
ajax.php
PHP:
    function new_pm()
    {
        require(AJAX_DIR .'new_pm.php');
    }
new_pm.php
PHP:
<?php
 
if (!defined('IN_AJAX')) die(basename(__FILE__));
 
global $lang, $userdata;
 
if (($userdata['user_new_privmsg'] > 0))
{
$pm_text = declension($userdata['user_new_privmsg'], $lang['NEW_PMS_DECLENSION'], $lang['NEW_PMS_FORMAT']);
}
else if((!$userdata['user_new_privmsg'] > 0) && ($userdata['user_unread_privmsg'] > 0))
{
$pm_text = declension($userdata['user_unread_privmsg'], $lang['UNREAD_PMS_DECLENSION'], $lang['UNREAD_PMS_FORMAT']);
}else{
$pm_text = $lang['NO_NEW_PM'];
}
 
$this->response['html'] = $pm_text;
page_header.tpl
HTML:
            <a href="{U_PRIVATEMSGS}" id="pm-link">{PM_INFO}</a>
 
            <script type="text/javascript">
            ajax.new_pm = function() {
                ajax.exec({
                    action  : 'new_pm',
                });
                ajax.callback.new_pm = function(data) {
                    $('#pm-link').html(data.html);
                };
            }
            setInterval("ajax.new_pm()",2*60*1000);
            </script>
setInterval("ajax.new_pm()",2*60*1000); где 2 это минуты 60 секунды 1000 милисекунды
 

frost444

Пользователь
#8
dredd, не чего громоздкого, ты просто не учел то что есть просмотренные но не прочитанные сообщения. И в твоем случае они заменяются на то что нету сообщений, что не есть гуд
 

frost444

Пользователь
#10
dredd, замени свой код на мой, или добавь в шапку с тегом: "Второй вариант" и можно в FULL