Страница 1 из 1

Организация уведомлений, нужен совет

Добавлено: 2013.02.12, 10:24
bookin
Доброго времени суток.
Ситуация следующая, делаю уведомления, простенькое, таблица где хранятся уведомления для персоны, и виджет который вытягивает все это дело по времени. Вопросов не возникает если добавлять уведомления конкретно при каком либо действии(добавление, удаление, изменение чего либо), но возникают ситуации когда нужно по дате(времени), закинуть уведомление (к примеру по истечению срока гарантии уведомить), вопрос в том как лучше это организовать, на ум приходит только крон, который по времени будет дергать какой то метод в классах (количество классов может увеличиваться, намек на модульность) а методы уже будут разбираться, может кто может что то лучше посоветовать? Заранее благодарен.

P.S. Голова уже не варит, может что то не так написал =/

Re: Организация уведомлений, нужен совет

Добавлено: 2013.02.12, 11:02
yiijeka
cron'ом нормально решается эта задача, не мудрите.

Re: Организация уведомлений, нужен совет

Добавлено: 2013.02.12, 19:05
GroZa
Почему виджет не может просто обратиться к базе и проверить запросом (сравнив время): есть ли у пользователя непрочитанные уведомления; и вывести их?

Re: Организация уведомлений, нужен совет

Добавлено: 2013.02.12, 19:20
anton44eg
Насколько я понимаю уведомления по почте и тд. Я сегодня делал консольной коммандой по крону

Re: Организация уведомлений, нужен совет

Добавлено: 2013.02.12, 19:22
GroZa
А-а. Тогда да.

Re: Организация уведомлений, нужен совет

Добавлено: 2013.02.13, 12:18
sergo
На нужных страницах вешаем javascript, отрабатывающий по таймауту или по событию.
Скрипт вызывает через ajax модуль request.php; модуль чекает, что нужно, и показывает (echo) результаты своих действий.

Javascript + jquery, реализующий таймаут: каждые 5000 миллисекунд = 5 секунд. Размещаем его в php, который отрисовывает нужную страницы.
Тут же можно описать события, в ответ на которые будет посылаться ajax-запрос.
Через post передаём в request.php параметры, в данном примере это user и func.

Результат выдачи request.php будет отображен в <div id="divResult"'>

Код: Выделить всё

<script language="javascript">
function ajax_request() {

    $.ajax({
        url: 'request.php',
        type: "POST",
        data: "user=<?php echo $user ?>&func=<?php echo $func_name; ?>",
        success: function(data) {
            $('#divResult').html(data);
            window.setTimeout(ajax_reques, 5000); // milliseconds
        }
    });
}

ajax_request();
</script>
Исполняющий модуль request.php

Код: Выделить всё

require_once 'sql.php'; // устанавливаем соединение с sql

 $user =  htmlspecialchars($_POST['user']); // фильтруем данные из post на наличие html-тэгов
 $func =  htmlspecialchars($_POST['func']; 

 // как-то проверяем, что запрошенная функция существует. Либо 
 .....
 // что-то делаем, извлекаем какие-то данные
 ....
 
 // и отправляем  нужные данные внутрь div
 echo "эта фраза будет выведена внутри divResult"
Теперь фрагмент html-кода, которым мы выводим результат

Код: Выделить всё

Вот результат нашего ajax-запроса: <div id='divResult'></div>
Этот метод может быть доработан: мы должны тщательнее проверять post-данные, переданные в request.php .
Также мы должны проверять откуда был вызван модуль: со своего сервера или запрошен с чужого.
Злоумышленник может вызвать исполняющий модуль напрямую, как "http://domain.com/request.php" , и отправить туда что-то опасное через post.
Это что-то может быть sql-инъекцией, или какими-либо вредноносными данными.

Re: Организация уведомлений, нужен совет

Добавлено: 2013.02.13, 20:35
bookin
Спасибо всем за ответы, anton44eg уведомления не по почте(пока, на будущее возможно), потому GroZa натолкнул на правильную мысль, единственное что нужно делать какой то таймер, то выполнение будет слишком частым при большом количестве пользователей, можно тогда вообще в прелоадер запихать, и забыть, вот только если уведомления на почту отправлять то это уже не прокатит. sergo спасибо за пример реализации, но все это уже есть, остался только нюанс с проверкой сторонних событий.

Re: Организация уведомлений, нужен совет

Добавлено: 2013.02.13, 20:38
bookin
Может еще кто то подскажет как команды ложить в модуль (к примеру protected/modules/notify/commands) а не в protected/commands, точнее сделать возможным ложить и туда и туда