![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) ![]() ![]() |
witam,
zastanawiam się jak rozsądnie rozwiązać system prywatnych wiadomości w serwisie gdzie użytkownicy często z tego będą korzystać. gdyby za każdym razem gdy użytkownik dostawał maila z informacją o nowej prywatnej wiadomości to gdy dostanie ich 20 to dostanie 20 maili. w mailu tym chcę wysyłać tylko informacje o nowej wiadomości - bez treści wiadomości. nie trudno się domyśleć, że 20 to trochę dużo - może to być irytujące. zasugerowałem się innym serwisem, w którym info o nowych wiadomościach przychodzi raz na jakiś czas - jest tam informacja o ilości nowych wiadomości. wg mnie to jest najlepsze rozwiązanie. jak takie coś rozwiązać? gdy już raz zostanie wysłana informacja o tym, że jest nowa wiadomość, to ta wiadomość przy następnym sprawdzaniu nie jest już brana pod uwagę, ale gdy pojawi się nowa to jest wliczana do ilości nie przeczytanych wiadomości. domyślam się, że musi być kolumna dodatkowa, która będzie wskazywała czy powiadomienie zostało już wysłane. zatem można stworzyć taką strukturę tabeli: Kod temat, tresc, przeczytana, powiadomienie jak teraz ułożyć zapytanie, albo zapytania, które będą pobierać email usera i ilość nie przeczytanych wiadomości? -------------------- aplikacje internetowe | Symfony
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Przy użyciu Crona będziesz cyklicznie (np. co godz) sprawdzał i wysyłał maile. Czego potrzebujesz?
Czasu ostatniego sprawdzania - innymi słowy: time() - 3600 Teraz wystarczy pobrać wiadomości, które są nieprzeczytane i młodsze niż: time() - (time() - 3600). Tyle. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) ![]() ![]() |
proste rozwiązanie.
ale co w przypadku gdy z jakichś powodów ten mail nie zostanie wysłany? bo np. chwilowo baza nie będzie działać. wtedy w ciągu tej jednej godziny nie zostanie wysłany list, czyli ominie kolejka, no i później już wcale nie zostanie wysłana informacja, że jest nowa wiadomość. gdyby była dodatkowa kolumna z flaga wysłane powiadomienie / nie wysłane, wtedy niezależnie od czasu utworzenia wiadomości info będzie wysłane. dodatkowo można zrobić transakcję - dopiero jak mail na pewno zostanie wysłany wtedy zmienia się flaga, że info zostało wysłane. dla mnie takie rozwiązanie byłoby lepsze. -------------------- aplikacje internetowe | Symfony
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Też dobre. Ewentualnie zamiast time() - 3600 możesz sobie po pomyślnym wysłaniu maili zapisać (chociażby do pliku tekstowego) aktualną datę. Następnie przy ponownym włączeniu (czyli po przewidywanej godzinie) otworzyć ten plik i pobrać wszystkie wiadomości z datą utworzenia pomiędzy TERAZ, a DATA Z PLIKU.
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Przenoszę na PHP
-------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) ![]() ![]() |
hmm coś mi jednak nie pasuje to rozwiązanie z tym czasem.
ja to rozumiem tak, że z bazy pobieram wiadomości, które powstały w ciągu ostatnich 15 minut i mają status nie przeczytanych. ale przecież mogą być wiadomości, które nadal nie są przeczytane a zostały utworzone wcześniej. w takim przypadku w mailu ma być wysyłana informacja o ilości wszystkich nie przeczytanych wiadomości, a nie tylko tych z ostatnich 15 minut. czyli problem nadal nie rozwiązany. chyba bez dodania dodatkowej kolumny się nie obędzie. EDIT: to ma być coś takiego, że pobierane są wszystkie nieprzeczytane wiadomości i jeżeli któraś ma jeszcze nie ustawioną flagę info_wyslane to jest wysylany mail o ilosci nie przeczytanych i zmieniana flaga info_wyslane na 1. EDIT: o takie coś mi chodziło:
teraz w idpoczta będę miał id wiadomości, którym trzeba zmienić flagę powiadomieniena 1. mam nadzieję, że nic nie pominąłem, jeżeli ktoś coś zauważy błędnego w moim rozumowaniu to proszę pisać:) EDIT: jak na razie wszystko działa elegancko:) Ten post edytował AxZx 14.12.2008, 17:03:19 -------------------- aplikacje internetowe | Symfony
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 23:22 |