[GDRCD 5.4] - Messaggi stile WA postato il nel forum programmazione, gdrcd, grafica e open source
Sera a tutti :)
In pochissime parole... vorrei fare in modo che quando si apra il centro messaggi si abbia non una lista dei singoli messaggi ricevuti, ma un elenco dei mittenti e, cliccando su quelli, far aprire una finestra con tutta la cronologia dei messaggi, per l'appunto, in stile WhatsApp.
Il mio problema ovviamente è legato al MySQL... perché non so come fare. Ho pensato che il sistema fa un controllo dei messaggi con destinatario o mittente il mio PG (supponiamo Pippo). Se trova dei messaggi con mittente/destinatario Pippo, li seleziona. Poi li deve dividere per mittente/destinatario, per l'appunto, e mostrare nella pagina dei messaggi l'elenco di quelli che non sono Pippo e, cliccando, quando apre la finestra con tutti i messaggi, dividerli per persona, ovvero Tizio a sinistra e Pippo a destra.
E' fattibile senza morire dietro al codice?
Grazie ^_^
28/09/2016 00:26:42 e modificato il 28/09/2016 00:27:46 da leoblacksoul
Per farlo dovresti cambiare più o meno tutta la logica delle pagine dei messaggi privati.
Comunque a livello di query quello che ti serve è:
Una query per l'indice di tutte le conversazioni, che può risultare un po' complessa in effetti:
$query="SELECT personaggio, MAX( spedito ) AS ultimo
FROM (
SELECT IF( mittente = '".gdrcd_filter('in',$_SESSION['login'])."', destinatario, mittente ) AS personaggio, spedito
FROM 'messaggi'
WHERE mittente = '".gdrcd_filter('in',$_SESSION['login'])."'
OR destinatario = '".gdrcd_filter('in',$_SESSION['login'])."'
) AS T1
GROUP BY personaggio";
$query="SELECT *
FROM (
SELECT *
FROM 'messaggi'
WHERE (
mittente = '".gdrcd_filter('in',$_SESSION['login'])."'
AND destinatario = '".gdrcd_filter('in',$_GET['pg'])."'
)
OR (
destinatario = '".gdrcd_filter('in',$_SESSION['login'])."'
AND mittente = '".gdrcd_filter('in',$_GET['pg'])."'
)
ORDER BY spedito DESC
LIMIT 20
) AS T
ORDER BY spedito ASC";
---
Non chiedetemi aiuto in privato per questioni di programmazione; chiedete sul forum e eventualmente vi risponderò lì.
http://gdrportal.eu - Hosting per GDR
28/09/2016 16:11:53
Il fatto che compaia quel messaggio mi fa pensare che non hai riscritto le pagine dei messaggi.
La prima cosa che ho scritto era che la logica di quello che vuoi fare è ben diversa da come è implementata in gdrcd, quindi le pagine vanno comunque totalmente riscritte XD
---
Non chiedetemi aiuto in privato per questioni di programmazione; chiedete sul forum e eventualmente vi risponderò lì.
http://gdrportal.eu - Hosting per GDR
18/06/2019 02:18:00 e modificato il 18/06/2019 02:19:02 da angel1989
Riesumo questa vecchissima conversazione. Anche io vorrei fare la stessa cosa raccogliendo i messaggi per conversazioni. Ho provato la query suggerita qui su, ma non va e da solo non riesco a cavarne piede >>
29/02/2020 17:11:50 e modificato il 29/02/2020 17:12:28 da angel1989
Alla fine sono riuscito a fare questa modifica.
Non ho avuto risposta alla precedente domanda, ma ci riprovo di nuovo che non so bene che pesci prendere riguardo ad un'altra questione.
Vorrei ordinare l'elenco principale in base alla presenza di messaggi non letti ed ho fatto così:
$query="SELECT personaggio, MAX( spedito ) AS ultimo
FROM (
SELECT IF( mittente = '".gdrcd_filter('in',$_SESSION['login'])."', destinatario, mittente ) AS personaggio, spedito, letto
FROM messaggi
WHERE mittente = '".gdrcd_filter('in',$_SESSION['login'])."'
OR destinatario = '".gdrcd_filter('in',$_SESSION['login'])."'
) AS T1
GROUP BY personaggio
ORDER BY letto, personaggio";
02/03/2020 11:10:30
visto che GDRCD è un open source per cui si chiedono aiuti e per cui bisognerebbe condividere le soluzioni, posso chiederti come hai realizzato la cosa? :)
e.... non ho capito la domanda XD perdonami, potresti meglio spiegare il tuo problema?
21/06/2021 11:38:38
Riesumo questo topic perchè vorrei realizzare qualcosa del genere, ma ammetto che non ho ben capito come e dove agire, a parte quale file, per poter realizzare una visualizzazione come quella di WA! Chiedo una manina! Grazie in anticipo!
22/06/2021 16:32:39 e modificato il 23/06/2021 14:13:00 da kasa
morositas ha scritto: Riesumo questo topic perchè vorrei realizzare qualcosa del genere, ma ammetto che non ho ben capito come e dove agire, a parte quale file, per poter realizzare una visualizzazione come quella di WA! Chiedo una manina! Grazie in anticipo!
$result = gdrcd_query("SELECT personaggio_conversazione, testo, letto, MAX(spedito) as spedito
FROM (
(
SELECT mittente as personaggio_conversazione, testo, letto, spedito
FROM messaggi
WHERE 1
AND destinatario = '".$_SESSION['login']."'
AND destinatario_del = 0
AND spedito = (SELECT MAX(mcheck.spedito) from messaggi as mcheck WHERE mcheck.destinatario = messaggi.destinatario AND mcheck.mittente = messaggi.mittente )
GROUP BY mittente
ORDER BY letto, spedito DESC
)
UNION ALL
(
SELECT destinatario as personaggio_conversazione, testo, letto, spedito
FROM messaggi
WHERE 1
AND mittente = '".$_SESSION['login']."'
AND mittente_del = 0
AND spedito = (SELECT MAX(mcheck.spedito) from messaggi as mcheck WHERE mcheck.destinatario = messaggi.destinatario AND mcheck.mittente = messaggi.mittente )
GROUP BY destinatario
ORDER BY letto, spedito DESC
)
) AS conversazioni
GROUP BY personaggio_conversazione
ORDER BY letto, spedito DESC
LIMIT ".$pagebegin.", ".$pageend."", 'result');
GitHub: https://github.com/GDRCD/GDRCD
Discord: https://discord.com/invite/K2eWXpvu4M
GdR-O: https://www.gdr-online.com/readforum.asp?id=250579
22/06/2021 20:17:20
kasa ha scritto:
A quel punto, quando vai a leggere il messaggio tramite messages/read.inc.php al posto di leggere il singolo ID del messaggio, devi utilizzare il personaggio e quindi stamparti i listone dei messaggi ordinato per data spedito.
So che a primo acchito può sembrare una una bella rogna, nonchè di esser sommersi dalla quantità di punti da toccare, ma una volta compreso il ragionamento alla base, ti accorgi che si tratta solo di un modo diverso di raccogliere dati. NECESSARIAMENTE, tutta la parte dei messaggi andrebbe un poco ripensata proprio per prestarsi a questi nuovi parametri utilizzati.
Kasa.
Leggendra.eu - Fantasy steampunk itinerante
https://www.leggendra.eu
22/06/2021 20:31:47
haruka ha scritto:
Sto cercando anche io di capire la logica di questa impostazione.
Mi areno, o per meglio dire, non capisco i passaggi da fare per modificare il read.
GitHub: https://github.com/GDRCD/GDRCD
Discord: https://discord.com/invite/K2eWXpvu4M
GdR-O: https://www.gdr-online.com/readforum.asp?id=250579
22/06/2021 21:52:37 e modificato il 22/06/2021 22:14:58 da haruka
kasa ha scritto:
haruka ha scritto:
Sto cercando anche io di capire la logica di questa impostazione.
Mi areno, o per meglio dire, non capisco i passaggi da fare per modificare il read.
Il perno di tutta logica si basa sulla transazione da una visione per ID (intendendo l ID del messaggio) ad una per Personaggio (ossia l altro personaggio della conversazione, mittente/destinatario).
Attualmente GDRCD lavora sempre sul singolo messaggio e quando si va ad effettuare una qualsiasi operazione, questa viene fatta quasi ed esclusivamente sull'ID. Per passare ad uno stile WA, occorre riformare la struttura sulla base della conversazione, quest ultima derivata dal Personaggio del quale si vuole visualizzare lo storico messaggi.
Quindi, anche in read.inc.php non devi mostrare il testo di un solo messaggio, ma l intera conversazione avuta prendendo tutti i messaggi intrattenuti tra i due utenti. Basterà utilizzare la query che ho usato nell index.inc.php, togliere i raggruppamenti e passare il personaggio di cui si vuole visualizzare lo storico.
Poi ...
La risposta dovrebbe rimanere inalterata come meccanismo, mentre il cancella messaggio lo si deve in parte riscrivere per basarsi sulla nuova visione.
Un poco più chiaro?
Kasa.
Leggendra.eu - Fantasy steampunk itinerante
https://www.leggendra.eu
Discussione seguita da:
Non puoi scrivere in questo Forum
Aggiungi Discussione ai Preferiti
Inoltra Discussione
Forum Programmazione, GDRCD, Grafica e Open Source
Torna alla lista Forum
✋😟
Abbiamo rilevato che stai usando un software per bloccare la pubblicità!
L'utilizzo di GDR-online.com è gratuito da oltre 17 anni ma è necessario coprire i costi per mantenerlo online... ti chiediamo di aiutarci disabilitando il blocco dei banner pubblicitari.
Togliere il blocco significa fare in modo che GDR-online.com possa continuare a far conoscere piccoli giochi amatoriali gratuitamente e offrire un servizio sempre migliore e adatto alle esigenze dei suoi giocatori!
Se questo avviso continua ad apparire nonostante tu abbia autorizzato il portale:
- Verifica nelle opzioni che venga disattivato AdBlock in tutto il dominio gdr-online.com e non solo in una pagina
- Controlla di non avere fra le estensioni installate altre analoghe ad AdBlock, come AdBlock Plusbr, ublock origin, ecc.
- Probabilmente sul tuo PC è installato un Antivirus che ha anche funzioni di blocco pubblicità
- Se usi Firefox impostare il "Blocco Contenuti" su "Normale" e non su "Restrittivo". Per farlo clicca sull'icona dello scudo vicino all'URL e clicca su "Disattiva Blocco per questo sito"
- Prova a premere CTRL + F5, riloggarti e vedi se il problema persiste