В продолжение полезных трудов skif'a хотелось бы добавить еще один ajax-tip Внимание, в IE были замечены глюки. Сегодня вечером пофикшу
Итак, автоматическое обновление кол-ва новых сообщений.
Описание: У пользователя открыта любая страничка livestreet, на которой отображается сколько непрочитанных сообщений находится в почтовом ящике. Данный tip автомтически обновляет этот блок каждые 5 секунд. После 60 запросов, если страница не была обновлена скрипт останавливается (после 5 минут). Это сделано для того чтобы если пользователь забыл закрыть браузер на ночь, неделю, не было лишних запросов. После загрузки страницы скрипт опять запускается.
1. Загружаем этот файл и кидаем его в /include/ajax/
Данный файл будет делать запрос к базе данных и возвращать кол-во новых сообщений для авторизированного пользователя
2. Добавляем javascript. Открываем main.js и вставляем в самый конец код:
var requestMessages = new JsHttpRequest();
requestMessages.onreadystatechange = function() {
if (requestMessages.readyState == 4) {
if (requestMessages.responseJS.bStateError) {
msgErrorBox.alert('Ошибка','Возникли технические проблемы при получении сообщений');
} else {
if (requestMessages.responseJS.iCountTalkNew>0) {
$('new_message').style.display="block";
$('no_messages').style.display="none";
$('new_msg_count').innerHTML = requestMessages.responseJS.iCountTalkNew;
}
else
{
$('new_message').style.display="none";
$('no_messages').style.display="block";
}
}
}
};
Данный код создает объект request, который при вызове обрабатывает ответ (если новые собщения есть, блок new_message становится видимым и в new_msg_count вставляется кол-во новых сообщений.
3. Редактируем header.tpl: после куска кода, где устанавливается переменная DIR_WEB_ROOT:
Тут мы задаем функцию reqMessages(), которая вызывает наш объект requestMessages и задаем периодичность вызова (5 секунд)
4. Редактируем html-шаблон в header.tpl
Открываем строку номер 62 и заменяем блок
я тоже могу парить мульку и умничать что у меня проект с 8к топиков и 40к коментов, простите это всё напарсеное или просто подразнить людей… уж извините за офф топ, надоело. и эти понты что юзать что не юзать. Вот решение! Оно оптимально! Не нравиться? — проходите мимо! Меня больше всего бесят эти обстракции: Я недоумеваю почему вы не юзаете mootools? Где конкретные факты? где статья с подробным описанием и примерами? — БРЕД!
Я думаю он имел в виду зачем дополнительный плагин request для mootools используется вместо стандартного…
Плагин интереснее стандартного решения mootools тем что параметры просто возвращать:)
Про 8к постов было не здесь сказано, да и просто перенесли всё из БД старого движка. Сейчас создается дизайн, за основу был взят вот такой.
Где примеры? Да вот же. Request, HTML Request, JSON Request, Form Send. Свои конкретные рецепты выложу как только до них дойду. Обещать не стану, но постараюсь не забыть.
requestMessages.responseJS.iCountTalkNew; Дошло.Через mootools я возвращал бы JSON объект. Это сложнее на пару строчек. Просто я в начале своего JS пути очень долго не понимал почему нельзя совместо юзать JQuery и Mootools. Я почти их скрестил, и до меня начало доходить ЧЕМ я всё это время занимался. :) Буквально прочел весь код обоих библиотек. Теперь стойкое отторжение к таким скрещиваниям, плюс осознанный выбор Моотулса и неплохое его понимание :)
если ты предложишь вариант проще без использования плагинов — я уверен что его примут.
Текущая реализация выполнена так исключительно из желания сделать как-то чтоб работало (ибо на шаблоне пока никто не заморачивался)
автор забыл отметить что при определенном кол-ве онлайн данный скрипт положит сервер.
извините, но это же не чат, чтоб каждые 5 секунд проверять личные сообщения.
если у вас есть реальная необходимость как можно быстрее уведомлять пользователя о новом личном сообщении, то лучше используйте для этого icq, в инете можно найти несколько классов для отправки сообщений.
делать из сайта чат считаю неправильным.
24 комментария
предлагаю вставить эту функцию по-умолчанию.
Плагин интереснее стандартного решения mootools тем что параметры просто возвращать:)
Про 8к постов было не здесь сказано, да и просто перенесли всё из БД старого движка. Сейчас создается дизайн, за основу был взят
Где примеры? Да вот же.
requestMessages.responseJS.iCountTalkNew; Дошло.Через mootools я возвращал бы JSON объект. Это сложнее на пару строчек. Просто я в начале своего JS пути очень долго не понимал почему нельзя совместо юзать JQuery и Mootools. Я почти их скрестил, и до меня начало доходить ЧЕМ я всё это время занимался. :) Буквально прочел весь код обоих библиотек. Теперь стойкое отторжение к таким скрещиваниям, плюс осознанный выбор Моотулса и неплохое его понимание :)
Текущая реализация выполнена так исключительно из желания сделать как-то чтоб работало (ибо на шаблоне пока никто не заморачивался)
извините, но это же не чат, чтоб каждые 5 секунд проверять личные сообщения.
выставите любой нужное вам время в миллисекундах.
reqMessages.periodical(5000);
можете поставить минуту
reqMessages.periodical(60000);
делать из сайта чат считаю неправильным.
1. Кеширование.
2. Увеличение времени м-у запросами.
И причем вообще тут чат?
в main.js $('new_message'), а в header.tpl id="new_messages"… вобщем это надо согласовать… чтоб без ошибок было.