Problema con l'ordine dei topic (Gdrcd5.1) postato il 20/07/2012 15:39:10 nel forum programmazione, gdrcd e open source
Salve a tutti!
Ho notato che la bacheca del gdrcd5.1 non ordina bene le discussioni in ordine cronologico.
In pratica, se una persona risponde ad una discussione vecchia, questa discussione non viene riportata in cima, anche se risulta essere l'unica discussione attiva.
Per farvi capire meglio il problema, mi aiutero con la seguente immagine:
Come potete notare dalle date cerchiate in rosso, la discussione "2° Discussione" è nata dopo la discussione "1° Discussione". Però, non è la discussione in cui c'è stato l'intervento più recente: dalle date cerchiate in blu potrete notare che la discussione "1° Discussione" ha avuto l'ultimo intervento. Ed è qui che sorge il problema: se si risponde ad una vecchia discussione, questa non sale in cima.
Per quanto riguarda il forum ancora non ho modificato nulla, ogni file è identico e preciso a quello presente nella versione base e non modificata di gdrcd advanced. Ho provato a cercare le cause di questo motivo nel file forum.inc.php, ma non ne sono venuto a capo, non riesco a capire dov'è il problema. Qualsiasi tipo d'aiuto è ben accetto. Grazie per l'attenzione!
Pagine → 1
20/07/2012 17:19:23
eheh, i thread in gdrcd non sono ordinati per ultima risposta, sono ordinati per data di creazione, e da questo punto di vista funziona perfettamente.
Se vuoi fare in modo che vengano ordinati per ultima risposta devi aggiungere un campo nella tabella messaggioaraldo che tenga in memoria la data dell'ultimo post del thread in questione e ordinare in base a quella. Ogni volta che un nuovo post viene messo in un thread dovrai modificare il nuovo campo nel record del thread; e stai attento a gestire bene cosa deve accadere quando cancelli un post!
20/07/2012 18:07:17
20/07/2012 21:42:19
esatto. memorizzarlo per i messaggi non-padre non ha nessuna utilità
22/07/2012 20:31:03
È davvero una bella gatta da pelare, allora.
Ho creato un nuovo campo identico al campo "data_messaggio" (che è il campo che registra la data di creazione del messaggio) e l'ho chiamato "data_riferimento". Però non so come fare per registrare la data solo nei messaggi iniziali, e non ho idea di come fare per aggiornare questa data ogni volta che viene aggiunto un nuovo messaggio alla discussione.
Spulciando il codice del file "forum.inc.php", ho notato che dalla riga 157 (dove comincia la parte relativa alla nuova creazione di messaggi e topic) il titolo viene registrato solo se il messaggio è un messaggio iniziale, quindi volevo realizzare qualcosa di simile anche per la data di riferimento, ma non ci sono riuscito.
Sto brancolando nel buio, e da solo non ne riesco a venire a capo... Non so neanche se sto agendo nella parte corretta del file. Chi mi può dare una mano?
22/07/2012 22:06:49 e modificato da leoblacksoul il 22/07/2012 22:10:45
non andare così in fondo...il tuo problema risolve già alla riga 16 del file forum.inc.php:
22/07/2012 22:27:08 e modificato da dyrr il 22/07/2012 22:28:53
In teoria si potrebbe fare il tutto anche senza aggiungere un nuovo campo alla tabella semplicemente modificando la query che gestisce il recupero dei topic
la query in questione originaria è questa, circa a riga 490-500 di forum.inc.php.
23/07/2012 13:20:48
Vi ringrazio moltissimo! Ho provato entrambe le soluzioni, e funzionano perfettamente sia sulla versione patchata che su quella non patchata del file forum.inc.php
La soluzione di Dyrr ci ho messo un po' a capirla; ho dovuto studiarla un po' prima di capire come funzionasse, perché non conoscevo la funzione COALISCE e non capivo che diavolo fosse. La soluzione di Leoblacksoul, invece l'avevo abbandonata perché non riuscivo a farci nulla, dalla riga 16 ero riuscito solo a creare al massimo un campo "doppione" di data_messaggio.
C'è però un'ultima cosa, che completerà la bacheca del gdrcd5.1 rendendolo un vero e proprio forum, su cui chiedo ancora una volta aiuto.
Studiando queste due soluzioni ho trovato il modo per sperimentare un piccolo script che segni quante volte è stata aperta la discussione, ma lo devo ancora perfezionare.
In pratica ho creato un nuovo campo nel database che ho chiamato "letto" (tipo: int(8), predefinito: 0), ed ho aggiunto il seguente script alla riga 540 (dove parte l'elenco delle discussioni):
<?php gdrcd_query("UPDATE messaggioaraldo SET letto = letto + '1' WHERE id_messaggio = ".gdrcd_filter('out',$row['id_messaggio']).""); ?>
In questo modo, il campo "letto" viene aggiornato... Ma purtroppo non aggiorna solo il topic aperto, ma tutti i topic presenti nella relativa bacheca.
Come posso fare per aggiornare solo il topic che viene aperto?
23/07/2012 14:04:11
Secondo me è sbagliato il punto dove inserisci la query. dovresti inserire una query simile intorno a riga 240 dove visualizza non l'elenco dei topic ma dei messaggi del topic.
Io ho provato con una simile query:
23/07/2012 22:25:14
10/05/2018 12:19:51 e modificato da kyuren il 10/05/2018 12:21:40
Innanzitutto scusate se necroposto questo topic vecchissimo, ma sto cercando di applicare questa soluzione alla versione 5.4.
L'obiettivo è quello di ottenere l'ordinamento dei topic delle bacheche in base all'ultima risposta postata, e non la data di pubblicazione originaria del topic. Come avviene solitamente nei forum, insomma.
Ho cercato di adattare la soluzione di Dyrr:
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Aggiungi ai Preferiti Inoltra Discussione Forum Programmazione, GDRCD e Open Source Elenco Forum
pagods ha recensito La Tana del Ladro