[GDRCD 5.4] - Messaggi stile WA
22/06/2021 22:45:25
Figurati!
Se hai bisogno di una mano, posta pure qua sotto le cose che non tornano.
Kasa.
23/06/2021 11:23:08 e modificato da haruka il 23/06/2021 11:24:34
kasa ha scritto: Figurati!
Se hai bisogno di una mano, posta pure qua sotto le cose che non tornano.
Kasa.
E io chiedo (ma per favore, tieni a mente che sono smanettona e non ho studiato php, quindi sicuramente sono domande stupide o che fanno cadere le baccia :D)
Ho inserito la query in index. Mi dava errori, poi cercando di capire perché ho visto che tu nella tua query avevi messo gli apici, mentre nelle query di gdrcd 5.5 non ce ne sono, quindi ho provato a toglierli e gli errori sono spariti.
Ora mi trovo al next step.
Cerco di capire il concetto. Il nuovo index non dovrebbe riportare la lista dei messaggi (inviati e ricevuti), ma la lista dei nomi con cui il mio personaggio intrattiene le conversazioni. Poi cliccando sul nome si aprirà la pagina read.inc.php, che invece dovrà avere tutta la conversazione.
Torniamo a index un attimo.
Ad un certo punto devo aver qualcosa di questo tipo:
while($row = gdrcd_query($result, 'fetch')) {
?>
<tr>
<td>
<?php echo $row['id'] ?>
</td>
...
A posto di quel $row['id'], cosa devo mettere per stampare l'elenco dei personaggi con cui il mio intrattiene una conversazione? Lì mi perdo.
23/06/2021 11:54:54 e modificato da kasa il 23/06/2021 11:58:29
haruka ha scritto:
Ho inserito la query in index. Mi dava errori, poi cercando di capire perché ho visto che tu nella tua query avevi messo gli apici, mentre nelle query di gdrcd 5.5 non ce ne sono, quindi ho provato a toglierli e gli errori sono spariti.
Si, in effetti mi sono accorto di aver lasciato dei refusi dei tentativi su console MYSQL. Ho corretto la query.
Grazie della segnalazione!
haruka ha scritto:
Ad un certo punto devo aver qualcosa di questo tipo:
while($row = gdrcd_query($result, 'fetch')) {
?>
<tr>
<td>
<?php echo $row['id'] ?>
</td>
...
[quote]A posto di quel $row['id'], cosa devo mettere per stampare l'elenco dei personaggi con cui il mio intrattiene una conversazione? Lì mi perdo.
Sei arrivata al punto in cui devi stampare la lista delle varie conversazioni.
Prepara l'header della tabella con le colonne che meglio credi. Sicuramente ti conviene partite da una impostazione tipo:
Utente - Anteprima - Data ultima risposta - Letto
Dove, rispettivamente, usi le seguenti entrate di $row:
personaggio_conversazione - testo - letto - spedito
N.B.: per facilitarti il lavoro, nella QUERY affianco al MAX(spedito) della prima SELECT (quella che va a prendere i valori dal FORM con le UNION) metti un as spedito, così:
SELECT personaggio_conversazione, testo, letto, MAX(spedito) AS spedito
FROM ( ...
E così formi la tabella ordinata per "conversazione".
Nell'anteprima al posto di fare questo:
<td>
<div class="elementi_elenco">
<a href="main.php?page=messages_center&op=read&id_messaggio=<?php echo $row['id'] ?>"><?php echo gdrcd_filter('out', substr($row['testo'], 0, 40)); ?>
...
</a>
</div>
</td>
Fai così:
<td>
<div class="elementi_elenco">
<a href="main.php?page=messages_center&op=read&personaggio_conversazione=<?php echo $row['personaggio_conversazione'] ?>"><?php echo gdrcd_filter('out', substr($row['testo'], 0, 40)); ?>
...
</a>
</div>
</td>
In questo modo ti assicuri che a read.inc.php arrivi la variabile $_REQUEST['personaggio_conversazione'] al posto di $_REQUEST['id_messaggio']. Lì dentro, ristrutturi il tutto per raccogliere TUTTI i messaggi intrattenuti con quel determinato PERSONAGGIO.
Kasa.
23/06/2021 13:32:29
Allora, con l'index ci sono quasi. C'è il problema però che mi porta in cima solo i messaggi che ho già letto.
Me ne sono accorta perché al momento ho creato due diverse pagine (messages_center collegata alla vecchia index e messages_center_new collegata a indexnew) mentre faccio i test.
Se leggo il messaggio che mi è arrivato, poi nella nuova index confermo che va in cima alle conversazioni.
A parte questo piccolo intoppo, il sistema per ora funziona e spero a breve di poter condividere dei risultati concreti. Spero nel pomeriggio di riuscire ad attaccare con il nuovo file read.
23/06/2021 14:12:21
haruka ha scritto: Allora, con l'index ci sono quasi. C'è il problema però che mi porta in cima solo i messaggi che ho già letto.
Me ne sono accorta perché al momento ho creato due diverse pagine (messages_center collegata alla vecchia index e messages_center_new collegata a indexnew) mentre faccio i test.
Se leggo il messaggio che mi è arrivato, poi nella nuova index confermo che va in cima alle conversazioni.
Errore mio.
Nella query di selezione dei messaggi, rimuovi il [i]DESC affianco al campo letto in tutti gli ORDER BY presenti[/i]. Altra nota, puoi togliere tutti i [i]MAX(spedito) nelle SELECT dei vari UNION, quelle interne al FROM[/i]. Si tratta di un campo non utile, che puoi fare a meno.
Aggiorno la query a pagina 1.
Kasa.
23/06/2021 14:43:24
Grazie Kasa, intanto mi sto orientando verso la possibilità di permettere agli user se scegliere il vecchio sistema o il nuovo.
Quindi in database, tabella personaggio, ho aggiunto il campo
new_mess | tinyint(1) | Come definito: 0
***
Nel file scheda_modifica.inc.php
dove c'è:
/*Carico le informazioni del PG*/
$record = gdrcd_query("SELECT descrizione,
subito dopo blocca_media, ho aggiunto blocca_media, new_mess,
Nella porzione di codice che inizia con
gdrcd_query("UPDATE personaggio SET cognome =
Questo:
blocca_media = " . (int) $blocca_media . ",
Diventa
blocca_media = " . (int) $blocca_media . ", new_mess= '" . gdrcd_filter('in', $_POST['modifica_messaggistica']) . "',
A seguire, il select
<div class='form_label'>
Sistema di messaggistica
</div>
<div class='form_field'>
<select name="modifica_messaggistica">
<option value="0" <?php if ($record['new_mess'] == '0')
{
echo 'selected';
} ?> />
Vecchio sistema</option>
<option value="1" <?php if ($record['new_mess'] == '1')
{
echo 'selected';
} ?> />
Nuovo sistema</option>
</select>
</div>
Fra poco invio anche le modifiche a messaggi.inc.php
23/06/2021 15:15:19
Per quel che riguarda il file messaggi.inc.php
In cima ho aggiunto:
$new_mess = gdrcd_query("SELECT new_mess FROM personaggio WHERE nome = '".$_SESSION['login']."'");
E poi, tutto il codice dopo questo blocco
echo '<script type="text/javascript"> if (document.images) { var msg_button1_up = new Image(); msg_button1_up.src = "../themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/menu/'.$img_up.'"; var msg_button1_over = new Image(); msg_button1_over.src = "../themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/menu/'.$img_down.'";} function msg_over_button() { if (document.images) { document["msg_buttonOne"].src = msg_button1_over.src;}} function msg_up_button() { if (document.images) { document["msg_buttonOne"].src = msg_button1_up.src}}</script>';
va sostituito con quello a seguire.
if ($new_mess['new_mess'] == '0') {
echo '<a onMouseOver="msg_over_button()" onMouseOut="msg_up_button()" href="../main.php?page=messages_center&offset=0" target="_top"><img src="../themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/menu/'.$PARAMETERS['names']['private_message']['image_file'].'" alt="'.gdrcd_filter('out',
$PARAMETERS['names']['private_message']['plur']
).'" title="'.gdrcd_filter('out', $PARAMETERS['names']['private_message']['plur']).'" name="msg_buttonOne" /></a>';
}
else
{
echo '<a onMouseOver="msg_over_button()" onMouseOut="msg_up_button()" href="../main.php?page=messages_center_new&offset=0" target="_top"><img src="../themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/menu/'.$PARAMETERS['names']['private_message']['image_file'].'" alt="'.gdrcd_filter('out',
$PARAMETERS['names']['private_message']['plur']
).'" title="'.gdrcd_filter('out', $PARAMETERS['names']['private_message']['plur']).'" name="msg_buttonOne" /></a>';
}
}
else {
if ($new_mess['new_mess'] == '0') {
echo '<a href="../main.php?page=messages_center&offset=0" target="_top">'.gdrcd_filter('out', $PARAMETERS['names']['private_message']['plur']).'</a>';
}
else
{
echo '<a href="../main.php?page=messages_center_new&offset=0" target="_top">'.gdrcd_filter('out', $PARAMETERS['names']['private_message']['plur']).'</a>';
}
}
echo '</div>';
if($PARAMETERS['mode']['alert_pm_via_pagetitle'] == 'ON') { ?>
<script type="text/javascript">
parent.stop_blinking_title();
</script>
<?php
}
} else { //$_SESSION['last_istant_message']=$max_id['max']; ?>
<?php if ($new_mess['new_mess'] == '0') { ?>
<div class="messaggio_forum_nuovo">
<a href="../main.php?page=messages_center&offset=0" target="_top">
<?php
if(empty ($PARAMETERS['names']['private_message']['image_file_new']) === false) {
echo '<img src="../themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/menu/'.$PARAMETERS['names']['private_message']['image_file_new'].'" alt="'.gdrcd_filter('out', $PARAMETERS['names']['private_message']['plur']).'" title="'.gdrcd_filter('out', $PARAMETERS['names']['private_message']['plur']).'" />';
} else {
echo gdrcd_filter('out', $PARAMETERS['names']['private_message']['plur']);
} ?>
</a>
</div>
<?php } else { ?>
<div class="messaggio_forum_nuovo">
<a href="../main.php?page=messages_center_new&offset=0" target="_top">
<?php
if(empty ($PARAMETERS['names']['private_message']['image_file_new']) === false) {
echo '<img src="../themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/menu/'.$PARAMETERS['names']['private_message']['image_file_new'].'" alt="'.gdrcd_filter('out', $PARAMETERS['names']['private_message']['plur']).'" title="'.gdrcd_filter('out', $PARAMETERS['names']['private_message']['plur']).'" />';
} else {
echo gdrcd_filter('out', $PARAMETERS['names']['private_message']['plur']);
} ?>
</a>
</div>
<?php } ?>
che va inserito in blocco prima di
<?php
if($PARAMETERS['mode']['alert_pm_via_pagetitle'] == 'ON'){ ?>
da questa riga a chiudere resta invariato.
23/06/2021 15:29:01 e modificato da kasa il 23/06/2021 15:39:09
Perfetto.
Se tutto torna, ora manca da adattare per bene index.inc.php e il read.inc.php.
Oltre questo, bisogna tenere in considerazione che nel caso in cui si scelga la nuova visualizzazione anche la funzione di cancellare i messaggi e il rispondi devono cambiare.
Ad esempio, quando si cancella index.inc.php andrebbe cancellata l'intera conversazione ( e di rimando popolare i campi mittente_del e destinatario_del di tutti i messaggi avuti con quel determinato personaggio della conversazione ) e nel selezionare quali messaggi cancellare, va fatto per le conversazioni.
Il rispondi in index.inc.php dovrebbe rimanere più o meno invariato.
Ma un passo alla volta.
Kasa.
23/06/2021 15:36:37
Sì, un passo alla volta perché ora la rogna è il read xD
Tanto per capire, la query che c'è in index va replicata anche lì?
E poi vanno stampati i messaggi della conversazione?
Perché al momento l'index mi genera un collegamento di questo tipo
main.php?page=messages_center_new&op=readnew&personaggio_conversazione=Haruka
ma se ci clicco, mi apre nuovamente la pagina di indexnew (insomma non cambia niente a livello di visualizzazione)
23/06/2021 16:27:41
La scema sono io (facepalm).
Nel messages_center_new avevo lasciato
switch(gdrcd_filter_get($_GET['op'])) {
case 'read':
Invece deve essere
switch(gdrcd_filter_get($_GET['op'])) {
case 'readnew':
E così, qualcosa si muove.
Adesso il read restituisce questo bel messaggio di errore :D
GDRCD MySQLi Error [File: readnew.inc.php; Line: 34]
Error Code: 1064
Error String: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 27
Error Detail: SELECT personaggio_conversazione, testo, letto, MAX(spedito) as spedito FROM ( ( SELECT mittente as personaggio_conversazione, testo, letto, spedito FROM messaggi WHERE 1 AND destinatario = 'Kether' 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 = 'Kether' 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 ,
Discussione seguita da
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Sea of Conquest ↗
Cafuné ↗
Foundation Galactic Frontier ↗
War Thunder ↗
Exclusive Villa GdR ↗
State of Survival ↗
Neverness to Everness ↗
Project Entropy ↗