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

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
bookin
Сообщения: 37
Зарегистрирован: 2011.01.28, 12:43

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

Сообщение bookin »

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

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

Аватара пользователя
yiijeka
Сообщения: 3091
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka »

cron'ом нормально решается эта задача, не мудрите.

Аватара пользователя
GroZa
Сообщения: 180
Зарегистрирован: 2012.10.16, 17:00
Откуда: Сочи
Контактная информация:

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

Сообщение GroZa »

Почему виджет не может просто обратиться к базе и проверить запросом (сравнив время): есть ли у пользователя непрочитанные уведомления; и вывести их?
Per aspera ad astra.

Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

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

Сообщение anton44eg »

Насколько я понимаю уведомления по почте и тд. Я сегодня делал консольной коммандой по крону

Аватара пользователя
GroZa
Сообщения: 180
Зарегистрирован: 2012.10.16, 17:00
Откуда: Сочи
Контактная информация:

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

Сообщение GroZa »

А-а. Тогда да.
Per aspera ad astra.

sergo
Сообщения: 23
Зарегистрирован: 2012.10.23, 15:26
Откуда: Россия

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

Сообщение 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-инъекцией, или какими-либо вредноносными данными.

bookin
Сообщения: 37
Зарегистрирован: 2011.01.28, 12:43

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

Сообщение bookin »

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

bookin
Сообщения: 37
Зарегистрирован: 2011.01.28, 12:43

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

Сообщение bookin »

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

Ответить