Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Po stronie usera czy przeglądarki?
DNMX
post 4.04.2022, 20:52:31
Post #1





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 18.09.2021

Ostrzeżenie: (0%)
-----


Mam na stronie system powaidomień. Taki dzwoneczek z liczbą który po najechaniu pokazuje kontener o nazwie "powiadomienia". Wszystko aktualizuje się AJAXem w tle żeby user zawsze na bierząco widział ilość powiadomień. I teraz moje pytanie. Na chwilę obecną zrobiłem JSONa którego pobiera user. Wygląda on mniej więcej tak:
Kod
    "0": {
        "name": "Powiadomienie pierwsze",
        "text": "Wszystko OK",
        "date": "2022-03-31 11:25:55",
        "icon": "icon1.png",
        "seen", false
    },
    "1": {
        "name": "Powiadomienie drugie",
        "text": "Ktoś coś sknocił",
        "date": "2022-03-31 14:43:30",
        "icon": "icon2.png",
        "seen", true
    },

I tak się zastanawiam, czy "parsować" tego JSONa po stronie użytkownika, tzn jeśli seen == false dawać całosć w <b>, jeśli icon2.png (ikonka z wykrzyknikiem) to dawać całość czerowną czcionką, itd itp czy od razu zwrócić użytkownikowi HTML do wyświetlenia? Które rozwiązanie lepiej wybrać i któ©e ma jakie plusy? Jedyne co zauważyłem, to że jeśli chciałbym prezentować datę w stylu "4 dni temu" albo 2h 31 minut temu i chciałbym, żeby to się na berzącoaktualizowało to i tak musze użyć JS. Jakieś inne różnice?
Go to the top of the page
+Quote Post
viking
post 5.04.2022, 05:11:43
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Przecież i tak pobierasz to w js. A do takiej komunikacji lepiej nadają się server-sent events.


--------------------
Go to the top of the page
+Quote Post
DNMX
post 6.04.2022, 23:04:37
Post #3





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 18.09.2021

Ostrzeżenie: (0%)
-----


Jeszcze jedno pytanko. Jak to posortować po dacie? Dodam, ze ORDER BY w MySQLu nie wchodzi w rachubę bo powiadomienia brane są z trzech różnych tabel. Jedynym wspólnym mianownikiem jest data w takim samym formacie.
Go to the top of the page
+Quote Post
trueblue
post 7.04.2022, 07:26:36
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Jeśli wyniki są łączone na poziomie PHP: https://www.php.net/manual/en/function.usort.php
Jeśli możesz połączyć wyniki na poziomie MySQL, to użyj UNION ALL oraz ORDER BY.


--------------------
Go to the top of the page
+Quote Post
DNMX
post 7.04.2022, 09:39:44
Post #5





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 18.09.2021

Ostrzeżenie: (0%)
-----


Myślałem na UNIONem ale przed złączeniem muszę nieco inaczej obrobić dane z tabeliA niż z tabeliB. Taki kod zadziałał:
  1. return function ($a, $b) use ($key) {
  2. return strnatcmp($a[$key], $b[$key]);
  3. ;
  4. }
  5. usort($arr, build_sorter('date'));

Dzięki!

Edit. Nie wiedziałem, jak zrobić, żeby ta funkcja sortowała po dacie ale malejąco więc zrobiłem obejście:
  1. $arr = array_reverse($arr);


Teraz zostaje mi po stronie usera zrobienie dla kazdego powiadomieniaczegoś w stylu:
  1. <a class="dropdown-item d-flex align-items-center" href="#">
  2. <div class="mr-3">
  3. <div class="$icon">
  4. <i class="fas fa-exclamation-triangle text-white"></i>
  5. </div>
  6. </div>
  7. <div>
  8. <div class="small text-gray-500">$name - $date</div>
  9. $text
  10. </div>
  11. </a>

Próbowałem się przejechać po każdym elemencie zgodnie z tym poradnikiem https://zetcode.com/javascript/jsonforeach/ ale nie działa. Ktoś mógłby podrzucić coś działającego?

Ten post edytował DNMX 7.04.2022, 10:41:37
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.04.2024 - 00:39