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

Тема в разделе "Модификации для TorrentPier (архив)", создана пользователем dredd, 28 окт 2012.

  1. dredd

    dredd Пользователь

    Сообщения:
    336
    Симпатии:
    300
    Версия TP:
    2.2.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 -->
     
  2. dredd

    dredd Пользователь

    Сообщения:
    336
    Симпатии:
    300
    Версия TP:
    2.2.1
    Если всё безотказно работает, то можно и в Фулл перенести.)
     
  3. Lange

    Lange Пользователь

    Сообщения:
    1.791
    Симпатии:
    143
    Версия TP:
    2.2.1
    PS
    setInterval(function() {pmReq.request()}, 60000);
    60000 настойка интервала
     
    dredd нравится это.
  4. frost444

    frost444 Пользователь

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

    dredd Пользователь

    Сообщения:
    336
    Симпатии:
    300
    Версия TP:
    2.2.1
    Я только адаптировал и не более) Буду признателен если переделаете.
     
  6. frost444

    frost444 Пользователь

    Сообщения:
    193
    Симпатии:
    58
    не выдержал на глаз накатал))
    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 милисекунды
     
    dredd нравится это.
  7. dredd

    dredd Пользователь

    Сообщения:
    336
    Симпатии:
    300
    Версия TP:
    2.2.1
    Громоздко) и в тоже время компактно!)
     
  8. frost444

    frost444 Пользователь

    Сообщения:
    193
    Симпатии:
    58
    dredd, не чего громоздкого, ты просто не учел то что есть просмотренные но не прочитанные сообщения. И в твоем случае они заменяются на то что нету сообщений, что не есть гуд
     
  9. dredd

    dredd Пользователь

    Сообщения:
    336
    Симпатии:
    300
    Версия TP:
    2.2.1
    Логично. Спасибо.
     
  10. frost444

    frost444 Пользователь

    Сообщения:
    193
    Симпатии:
    58
    dredd, замени свой код на мой, или добавь в шапку с тегом: "Второй вариант" и можно в FULL
     

Поделиться этой страницей