Забыли пароль?
Запросите новый здесь.

Автор темы: yury
ID темы: 639
Информация:
Тема содержит 34 сообщения, была просмотрена 8114 раз.
Просмотр темы
PHP-Fusion Russia » Веб-разработка » PHP
 Распечатать тему
Обратный отсчет времени
yury
Не помню был или нет плаг. Как сделать во фьюжене обратный отсчет. Т.е предположим в новости указано начало и конец показа новости. НАдо чтобы выводилось:

до конца показа осталось: .... дней
 
dark
К 2012 году готовишься? ag

А по существу в базе хранится время когда новость отключить в unix формате - news_end.
Пишем простенький код:

echo "До конца показа осталось: ".ceil(($data['news_end'] - time())/86400)." дней";

Может есть даже какой оператор перевода секунд в дни, но так на вскидку не помню. $data меняем на свое название массива где идет выборка новости. Может еще понадобиться проверка на то что не прошла ли уже эта дата и заполнена ли она.
 
yury
да, было бы хорошо. если сделать, что если дата прошла. то писать: срок истек)

есть вариант как сделать ?)
Изменил(а) yury, 23.05.2011 17:56
 
jikaka
было где-то реализовано
панели обратного отсчета до события
 
Web
yury
видел только на флеше

да вобщем то предложенный dark вариант считает, только осталось вывести, что СОБЫТИЕ НАСТАЛО и после через сутки уже писать СОБЫТИЕ ПРОШЛО
 
dark
Настало - смотри если та формула = 1 (или нулю, там смотри как получился отсчет). Ну и естественно если ($data['news_end'] - time()) < 0 (отрицательна) то событие уже прошло.
 
yury
у меня следующий код:

echo ''.($data1['visibility'] != 0 ? '"<strong>Статус новости:</strong>"'.$this->visibility[$data1['visibility']].'' : '<br />До конца показа осталось дней: '.ceil(($data1['finish'] - time())/86400).'').'';


т.е статус показывается, если статус не присовен. то показывает сколько дней осталось. Соответственно если статус новости не будет присвоен, после окончания срок показа, то выводить. что срок истек. Если же наступает ДЕНЬ ИКС, то показывать. что ДЕНЬ НАСТАЛ!
 
yury
или например такую загагулину придумал: подписаться на отдельную новость (после нажатия на кнопку на почту приходит письмо со ссылкой на подписанную новость), и если подходит срок к окончанию ее показа, то отправлять на мыло подписавшимуся сообщение об этом и ссылкой на новость. или же если новость отредактирована, то также слать сообщение о том, что новость отредактирована)

у кого какие идеи?)
 
yury
dark, подскажешь?)

и еще такой вопрос по времени. например как вывести те новости, показ которых заканчивается через 5 дней? какое условие добавляется в запрос?
 
dark
yury написал:
например как вывести те новости, показ которых заканчивается через 5 дней? какое условие добавляется в запрос?


AND news_end<=".(time()-432000."


Время в базе хранится в секундах.

что бы рассчитать 5 дней нужно рассчитать сколько секунд в 5 днях. 60 секунд * на 60 минут * 24 часа * 5 дней. Как раз получается 432000.

Насчет же писем это уже мудрено получается. Нужно посмотреть как это реализовано с подпиской на темы форума и реализовать что то наподобии.
 
yury
а, да, действтиельно же есть подписка на темы форума. тоже посмотрю, если догоню как реализовать)

спасибо, выручаешь!ab
 
yury
внесу небольшую точность в синтаксис, если вдруг у кого подобная зада стоит тоже
O:-)

AND (news_end<=".(time()-432000).")

Изменил(а) yury, 26.05.2011 21:55
 
dark
Скобка в конце ненужна.

AND news_end<=".(time()-432000)."
 
yury
у меня именно с приведенным синтаксисом работает почему то.
 
dark
условие наверное идет последним и последняя скобка это общая от всего запроса
 
yury
в форуме вот это как я понял отчасти отвечает за подписку:

Загрузить источник  GeSHi: PHP
  1. if (iMOD) { echo "<form name='mod_form' method='post' action='".FUSION_SELF."?thread_id=".$_GET['thread_id']."&amp;rowstart=".$_GET['rowstart']."'>n"; }
  2. echo "<table cellpadding='0' cellspacing='1' width='100%' class='tbl-border forum_thread_table'>n";
  3. $numrows = dbrows($result);
  4. $current_row = 1;
  5. while ($data = dbarray($result)) {
  6. $message = $data['post_message'];
  7. if ($data['post_smileys']) { $message = parsesmileys($message); }
  8. if ($current_row == 1) {
  9. echo "<tr>n<td colspan='2' class='tbl2 forum-caption'>n<div style='float:right' class='small'>";
  10. if (iMEMBER && $settings['thread_notify']) {
  11. if (dbcount("(thread_id)", DB_THREAD_NOTIFY, "thread_id='".$_GET['thread_id']."' AND notify_user='".$userdata['user_id']."'")) {
  12. $result2 = dbquery("UPDATE ".DB_THREAD_NOTIFY." SET notify_datestamp='".time()."', notify_status='1' WHERE thread_id='".$_GET['thread_id']."' AND notify_user='".$userdata['user_id']."'");
  13. echo "<a href='postify.php?post=off&amp;forum_id=".$fdata['forum_id']."&amp;thread_id=".$_GET['thread_id']."'>".$locale['515']."</a>";
  14. } else {
  15. echo "<a href='postify.php?post=on&amp;forum_id=".$fdata['forum_id']."&amp;thread_id=".$_GET['thread_id']."'>".$locale['516']."</a>";
  16. }
  17. }
Добавлено за 0.036 секунд, используя GeSHi 1.0.8.10
 
yury
т.е как я понимаю, если произошел апдейт таблицы с новостью/темой, то отправляет уведомление на почту. ну и конечно кнопка отписаться
 
dark
Ну да, без дополнительной таблицы никак не получится. Где то же нужно хранить данные кто на что подписался.
 
yury
dark написал:

Настало - смотри если та формула = 1 (или нулю, там смотри как получился отсчет). Ну и естественно если ($data['news_end'] - time()) < 0 (отрицательна) то событие уже прошло.


вот только же не совсем верно, когда =0, т.к это получается когда числа совпадают один в один. а если до конца суток, то получается надо выбрать диапозон
 
dark
Я имел ввиду что расчет уже переведен в дни. Когда равно 0 дней разницы, то выводить событие настало. А вот какое тут число точно 1 или 0, это уже нужно смотреть по самому расчету, на вскидку сложно судить.
 

Поделиться этой темой
Социальные закладки: Vkontakte Odnoklassniki Mail.ru Facebook Google Tweet This
URL:
BBcode:
HTML:

Перейти на форум:
Похожие темы
Темы Форум Ответов / Просмотров Последние сообщения
Установка времени и даты  →  Вопросы новичков 12 / 3908 22.02.2013 20:52
Установка времени для команды  →  PHP 4 / 1929 30.06.2011 05:12
Топ 5 пользователей форума
Alex Alex (1,197)   Zaxap Zaxap (1,078)   Vova Vova (877)   Pisatel Pisatel (678)   util util (666)