Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Po stronie przeglądarki _ Po stronie usera czy przeglądarki?

Napisany przez: DNMX 4.04.2022, 20:52:31

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?

Napisany przez: viking 5.04.2022, 05:11:43

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

Napisany przez: DNMX 6.04.2022, 23:04:37

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.

Napisany przez: trueblue 7.04.2022, 07:26:36

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.

Napisany przez: DNMX 7.04.2022, 09:39:44

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 http://www.php.net/strnatcmp($a[$key], $b[$key]);
  3. ;
  4. }
  5. http://www.php.net/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 = http://www.php.net/array_reverse($arr);


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

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?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)