[GDRCD 5.6.0.5] Creazione di una Chat Off accessoria
[GDRCD 5.6.0.5] Creazione di una Chat Off accessoria postato il 20/01/2025 16:09:05 nel forum programmazione, open source e hosting
Come da titolo, sto pensando di creare una piccola chat off ( a scomparsa, come quella dei Customer Care ) fixata sul fondo della land - nel footer o header - e che quindi sia visibile sempre.
Ho creato la struttura del pannello a scomparsa direttamente nel layout, e ricopiato il sistema utilizzato per la chat normale per far comunicare l'invio del messaggio e la sua visualizzazione. Qui sotto il codice dentro al file chat_off.inc.php
<?php include('../header.inc.php');/*Header comune*/ ?>
<?php include('../ref_header.inc.php');/*Header comune*/ ?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 20px;
background-color: #232a20;
/*color: #e3cca1;*/
}
div.chat_off_box{
}
#wrapper {
max-width: 400px;
height: 370px;
margin: 0 auto;
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
}
#chatbox {
width: 250px;
overflow-y: auto;
background: #232a20;
}
#chatbox div {
margin-bottom: 5px;
}
#chatbox strong {
color: #cc8400;
}
form {
display: flex;
}
#usermsg {
flex-grow: 1;
padding: 10px;
border: 1px solid #555;
border-radius: 4px;
margin-right: 5px;
}
#submitmsg {
padding: 10px;
border: none;
border-radius: 4px;
background: #843d22;
color: #e3cca1;
cursor: pointer;
}
#submitmsg:hover {
background: #cc8400;
}
</style>
</head>
<body>
<div id="wrapper">
<?php $_SESSION['last_message'] = 0; ?>
<div style="height: 1px; width: 1px;">
<iframe src="pages/chat_off.inc.php?ref=30&chat_off=yes" class="iframe_chat_off" id="chat_off_frame" name="chat_off_frame" frameborder="0" allowtransparency="true">
</iframe>
</div>
<div id="pagina_chat_off" class="chat_off_box">
</div>
<form action="pages/chat_off.inc.php?ref=30&chat_off=yes" method="post" target="chat_frame" id="chatoff_form_messages">
<div class="casella_chat_off"> <input name="message" id="message" value="" /> </div>
<div class="casella_chat_off" style="position:relative; bottom:7px;">
<input id="invia" type="submit" value="<?php echo gdrcd_filter('out', $MESSAGE['interface']['forms']['submit']); ?>" />
<input type="hidden" name="op" value="new_chatoff_message" />
</div>
</form>
</div>
</body>
</html>
<?php include('../footer.inc.php');/*Header comune*/ ?>
Ho creato un nuovo file chiamato chatoff.inc.php che funziona esattamente come chat.inc.php
Nel file ref_header.inc.php ho aggiunto i seguenti segmenti di codice
if((gdrcd_filter_get($_REQUEST['chat_off']) == 'yes') && (empty($_SESSION['login']) === false)) {
$typeOrder1 = ($PARAMETERS['mode']['chat_from_bottom'] == 'ON') ? 'DESC' : 'ASC';
/*Se ho inviato un messaggio nella chat off*/
if(gdrcd_filter('get', $_POST['op']) == 'new_chatoff_message') {
$chat_message1 = gdrcd_filter('in', gdrcd_angs($_POST['message']));
gdrcd_query("INSERT INTO chat_off ( mittente, ora, testo ) VALUES ( '".$_SESSION['login']."', NOW(), '".$chat_message1."')");
}//Fine (gdrcd_filter('get', $_POST['op']) == 'new_chatoff_message')
//formattazione chat off
$query1 = gdrcd_query("SELECT mittente, ora, testo FROM chat_off
ORDER BY id ".$typeOrder1, 'result');
while($row1 = gdrcd_query($query1, 'fetch')) {
$add_chat_off .= '<div class="chat_row">';
$add_chat_off .= '<span class="chat_time">'.gdrcd_format_time($row1['ora']).'</span>';
$add_chat_off .= '<span class="chat_name">'.gdrcd_format_time($row1['mittente']).'</span>';
$add_chat_off .= '<span class="chat_msg" style="line-height: 1.5; ">'.gdrcd_filter('out', $row1['testo']).'</span>';
$add_chat_off .= '</div>';
}
gdrcd_query($query1, 'free');
// Aggiorno ultimo messaggio visualizzato
$_SESSION['last_message'] = $last_message1;
}// Fine (gdrcd_filter_get($_REQUEST['chat_off']) == 'yes') && (empty($_SESSION['login']) === false)
modificato questo pezzo
<body class="transparent_body" <?php if(gdrcd_filter('get', $_REQUEST['chat']) == 'yes') {
echo 'onLoad="echoChat();"';
} else if (gdrcd_filter('get', $_REQUEST['chat_off']) == 'yes') {
echo 'onLoad="echoChatOff();"';
}?> >
e aggiunto ancora
if(gdrcd_filter('get', $_REQUEST['chat_off']) == 'yes') {
echo '<script type="text/javascript"> function echoChatOff(){';
/** * Gestione dell'ordinamento
* @author Blancks
*/
if($PARAMETERS['mode']['chat_from_bottom'] == 'OFF') {
echo 'parent.document.getElementById(\'pagina_chat_off\').innerHTML+= '.json_encode((string) $add_chat_off).';';
echo 'scrolling = parent.document.getElementById(\'pagina_chat_off\').scrollHeight;';
} elseif($PARAMETERS['mode']['chat_from_bottom'] == 'ON') {
echo 'parent.document.getElementById(\'pagina_chat_off\').innerHTML= '.json_encode((string) $add_chat_off).'+parent.document.getElementById(\'pagina_chat_off\').innerHTML;';
echo 'scrolling = 0;';
}
/** * Gestione intelligente della scrollbar
* Forza lo scroll solo quando ci sono nuovi messaggi
* @author Blancks
*/
if( ! empty($add_chat)) {
echo 'parent.document.getElementById(\'pagina_chat_off\').scrollTop = scrolling;';
}
if(gdrcd_filter('get', $_POST['op']) == 'new_chatoff_message') {
echo 'parent.document.getElementById(\'chatoff_form_messages\').reset();';
}//if
echo '}</script>';
}
e, al di la' la necessità di doverlo sistemare a livello di CSS, funziona MA - perché c'è un MA grossissimo - quando lo metto, e vado in una chat normale, inizia a duplicarmi, triplicarmi, quadruplicarmi i messaggi inviati in chat ( non a database, ma è come se a ogni check in cui si aggiorna la land, allora ne stampasse una nuova serie in chat ).
Chiaramente il codice va' in contrasto con quello base di GDRCD - ma dove e come ? Se qualcuno potesse darmi una mano vi sarei estremamente grata !!
Pagine → 1
17/03/2025 04:07:12
Non so se nel frattempo hai risolto, ma lascio la soluzione qua per chi verrà dopo.
Mi pare che il "problema" fosse questo $_SESSION['last_message']
ti basta che in chat off invece di utilizzare questo usi $_SESSION['last_message_off'] ad esempio e dovrebbe andare.
20/03/2025 20:47:16 e modificato da ammy il 20/03/2025 21:12:47
Funziona ! Grazie mille, era proprio quello - ora mi mancano solo un paio di dettagli:
- fare in modo che il punto di partenza della chat ( quando ci sono più messaggi che eccedono l'altezza della chat ) sia quello più in basso, proprio come in una chat normale
- eliminare la stessa ripetizione da dentro la chat OFF
Con quello, più l'aggiunta della notifica al nuovo messaggio ( che già ho idea di come fare ) sarebbe completa =)
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Sea of Conquest ↗