nikestylex7
5.11.2013, 21:22:00
Witam. Piszę stronę gdzie użytkownik będzie mógł dodać ogłoszenie. Chciałbym w końcu się dowiedzieć jak jest na allegro lub tablicy, że gdy czas przedmiotu minie on od razu znika.
Chciałbym jakoś ominąć taki błąd, że użytkownik wchodzi w zakładkę ogłoszenia i siedzi na niech dajmy 30min a np kilka ogłoszeń już się skończyło lecz u niego dalej są widoczne jako aktywne. Macie jakieś pomysły?
?
kamil4u
5.11.2013, 22:27:50
Słowo klucz: AJAX
Do zabawy z czasem - funkcje: setInterval i setTimeout
z tego co wiem z konferencji na allegro używają Varnish`a i user wcale nie dostaje aktualnych danych tylko to co trzymają w cache.. Więc nie wiem skąd czerpiesz takie info

zawsze możesz odpytywać ajaxem i sprawdzać time to die
nikestylex7
5.11.2013, 22:45:46
To już w ogóle czarna magia dla mnie... Muszę jakoś sobie poradzić bo priorytetem jest to jak użytkownik jest wylogowany jego ogłoszenie może się zakończyć. Nie wiem może znacie jakieś przykłady? Coś na czym bym mógł bazować. Chodzi o prosty skrypt który by sprawdzał aktualny czas i ten czas do końca ogłoszenia i zakańczał w tle.
no to cron.. a odliczanie czasu to np
http://keith-wood.name/countdown.html
nikestylex7
5.11.2013, 22:55:34
ale chodzi mi o to żeby po prostu w tle usuwało ogłoszenia które się skończyły np:
- użytkownik dodał ogłoszenie o 21:30 i 31s na 1 godzinę czyli ogłoszenie jest widoczne do 22:30 i 31s
- wylogował się
- gdy mija 22:30 i 31s a dokładnie jest 22:30 i 32s
ogłoszenie zostaje dezaktywowane
i tak np jak mam 1000 ogłoszeń żeby to działało dla wszystkich
// up to będę musiał dla wszystkich zawsze cron ustawiać
no gdzieś timestamp musisz zapisywać zapewne w bazie wiec zapytanie jeśli czas minął to dezaktywuj i rozsyłasz do wszystkich gdzie twój timestamp większy od tego z bazy
nikestylex7
5.11.2013, 23:42:56
Wszystko jest zapisane w bazie tylko jak to zrobić żeby to działo się cały czas a nie wtedy jak użytkownik się zaloguje.
no to napisałem przecież cron i wykonuje Ci określone zadanie co określony czas
nikestylex7
5.11.2013, 23:50:52
ok określony czas lecz ogłoszenie ma swój czas i musi się zakończyć właśnie o tym czasie a nie o czasie jaki mam w cron
no to przecież po to Ci napisałem odliczasz czas... i jak minie to ukrywasz sobie dane ogłoszenie, a potem w tle co jakiś czas spr cronem czy czasem nie minął i zmieniasz np pole show z 1 na 0 albo wgl usuwasz wpis.. kwestia jak to chcesz rozwiązać zależy od Ciebie, ale jeszcze raz powtórzę nigdzie nie masz czasu rzeczywistego, bo nawet allegro pokazuje Ci nie aktualne dane

tylko to się dzieje w na tyle krótkim czasie, że tego nie zauważamy
nikestylex7
6.11.2013, 00:08:15
hmmm a jak to zrobić ? głównie to niech sobie odlicza jak już czas minął to niech zakończy (mówię tutaj o dużej ilości ogłoszeń jestem ciekawy jak to na działanie strony zadziała). Możesz podać jakiś przykład?
przykład czego? nie dam Ci zastosowania w praktyce bo sam takowego nie posiadam bo nie był mi potrzebny
nikestylex7
6.11.2013, 00:32:16
ok to opisz mi jak to zrobić po kolei jak możesz
A miałem wrażenie że już wszystko opisałem, no to w takim razie co jest nie jasne? btw allegro nawet nie odświeża mi czasu do końca od 3 minut mam 5 minut do końca
nikestylex7
6.11.2013, 00:48:52
hmm dla mnie nie jasne jest jak się za to wziąć.
Jak to zrobić żeby działało dla wszystkich ogłoszeń.
Jak zrobić aby gdy ogłoszenie się kończy zmieniło dane w tabeli z 1 na 0.
no to tak:
Żeby to działało optymalnie to przydało by się to rozwiązać podobnie do tego jak robi to allegro, lub tvn ale to inna branża. Tylko nwm czy sobie poradzisz, bo główna idea polega na tym, że w czasie kiedy robisz update do bazy, a jakiś klient się podpina potrzebujesz danych, a one są w tym czasie zablokowane bo je zmieniasz, dlatego w allegro nie wczytują tego co maja w bazie tylko to co trzymają w cache bo to czy Ty zobaczysz koniec parę sekund później naprawdę nie ma tak wielkiego wpływu... w dodatku aktualizacja następuje tam po przeładowaniu strony, wiec nie dostajesz informacji że aukcja zakończona jak bd 30 minut miał otwartą stronę i nic tam nie będziesz robił...
1) tak jak powiedziałem przy każdym wywołaniu skryptu cron tworzysz timestamp, następnie łączysz się do bazy i wybierasz wszystkie rekordy których timestamp jest mniejszy od tego który otrzymałeś... i wtedy robisz update na nich wszystkich... Tylko do tego potrzebujesz cache w którym przetrzymasz to co masz w momencie przed update zgodnie z tym co opisałem powyżej...
2) no to w tym update to właśnie zmienisz, pamiętając że
http://blog.kowalczyk.cc/2011/07/01/mysql-...typu-timestamp/
nikestylex7
6.11.2013, 01:13:53
troche skomplikowanie to napisałeś. nie mówię że ma być takie samo jak allegro. Chodzi mi po prostu żeby skrypt usuwał to co jest skończone i to wszystko. Jak nie odświeży strony a ogłoszenie sie skończyło to może wyskoczyć komunikat że ogłoszenie wygasło i to wszystko.
Poruszyłeś dość trudne zagadnienie wiec nie możesz oczekiwać prostych odpowiedzi...
no to już napisałem Ci to parę postów wyżej
http://forum.php.pl/index.php?showtopic=22...p;#entry1073923 a jeśli chcesz komunikat no to wtedy wykorzystujesz ajax i robisz dokładnie to samo, tyle tylko po stronie klienta... najlepiej połączyć obie metody

bo jak zamknę sobie to tak czy tak musi mi to usunąć
Znasz wgl crona i wiesz z czym to się je? tak samo pytanie czy znasz technologie AJAX?
nikestylex7
6.11.2013, 01:55:42
dotychczas crona nie używałem ani ajax. Bazuje na jquery proste skrypty i php Tworze dość obszerne strony lecz nie miałem styczności z cronem i ajaxem bo jestem samoukiem
jak większość osób tutaj, no to skoro jQuery
http://api.jquery.com/jQuery.ajax/, ale z bazami danych miałeś styczność rozumiem?
a o cron coś niecoś masz tutaj
http://www.phpro.org/tutorials/Run-Script-From-Cron.html
nikestylex7
6.11.2013, 02:18:28
ok postaram się przeanalizować to jutro i coś powalczyć dzięki dam znać jutro. Narazie
phpion
6.11.2013, 14:57:26
Po co od razu cron? Nie lepiej dodać do tabeli z ogłoszeniami kolumnę przetrzymującą czas wygaśnięcia ogłoszenia? Dodaję je dziś z terminem na 2 dni to do bazy trafia 2013-11-08 15:00:00. Wyciągając dane do list lub wyświetlając pojedyncze ogłoszenie warunkujesz je WHERE data_wygasniecia >= NOW() i po sprawie. Wóczas dodatkowa kolumna 0/1 będzie Ci zbędna bo na podstawie tej kolumny wiesz czy ogłoszenie jest aktywne czy nie. Ewentualne przedłużenie ważności przez użytkownika (jak na tablica.pl) to aktualizacja daty w tym polu na późniejszą datę. Mając datę wygaśnięcia ogłoszenia możesz też wysyłać przypomnienia "Jutro wygaśnie Twoje ogłoszenie", sortować je wyświetlając na początku te, które kończą się za chwilę itd.
phpion zgadza się, ale autor chciał robić to w tle wiec dostał takowe rozwiązanie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.