Precedente :: Successivo |
Autore |
Messaggio |
mirrors Mortale adepto

Registrato: 20/03/06 17:06 Messaggi: 33
|
Inviato: 23 Mar 2006 23:52 Oggetto: Chat in PHP in un CMS, problema |
|
|
Ciao, ragazzi.
Sul mio Portale dinamico ho una chat carina e funzionale.
l'unica cosa è che si resetta al cambio pagina...
Sarebbe più interessante e maggiormente interattiva se facesse il "refresh" ogni tot secondi indipendentemente dal resto della pagina.
E' possibile farlo?
Allego lo script del plugin della chat così che tutto sia più chiaro
Codice: | if(!is_object($aj)){ $aj = new textparse; }
if(IsSet($_POST['chat_submit']))
{
if(!USER && !$pref['anon_post'])
{
// disallow post
} else
{
$cmessage = $_POST['cmessage'];
$cmessage = htmlentities($cmessage);
$nick = trim(chop(preg_replace("/\[.*\]/si", "", $_POST['nick'])));
$fp = new floodprotect;
if(!$fp -> flood("chatbox", "cb_datestamp"))
{
header("location:".e_BASE."index.php");
exit;
} else
{
if((strlen(trim(chop($cmessage))) < 1000) && trim(chop($cmessage)) != "")
{
$cmessage = $aj -> formtpa($cmessage, "public");
if($sql -> db_Select("chatbox", "*", "cb_message='$cmessage' AND cb_datestamp+84600>".time()))
{
$emessage = CHATBOX_L17;
} else
{
$datestamp = time();
$ip = getip();
if(USER)
{
$nick = USERID.".".USERNAME;
$sql -> db_Update("user", "user_chats=user_chats+1, user_lastpost='".time()."' WHERE user_id='".USERID."' ");
} else if(!$nick)
{
$nick = "0.Anonymous";
} else {
if($sql -> db_Select("user", "*", "user_name='$nick' ")){
$emessage = CHATBOX_L1;
}else{
$nick = "0.".$aj -> formtpa($nick, "public");
}
}
if(!$emessage){
$cmessage = str_replace("<iframe", "<iframe", $cmessage);
$sql -> db_Insert("chatbox", "0, '$nick', '$cmessage', '".time()."', '0' , '$ip' ");
clear_cache("chatbox");
}
}
}else{
$emessage = CHATBOX_L15;
}
}
}
}
$pref['cb_linkc'] = str_replace("e107_images/", e_IMAGE, $pref['cb_linkc']);
if(!USER && !$pref['anon_post']){
if($pref['user_reg'])
{
$texta = "<div style='text-align:center'>".CHATBOX_L3."</div><br /><br />";
}
} else
{
$texta = "<div style='text-align:center'>".(e_QUERY ? "\n<form id='chatbox' method='post' action='".e_SELF."?".e_QUERY."'><p>" : "\n<form id='chatbox' method='post' action='".e_SELF."'><p>");
if(($pref['anon_post'] == "1" && USER == FALSE)){
$texta .= "\n<input class='tbox' type='text' name='nick' size='27' value='' maxlength='50' /><br />";
}
$texta .= "\n<textarea class='tbox' name='cmessage' cols='26' rows='5' style='overflow:hidden'></textarea>\n<br />\n<input class='button' type='submit' name='chat_submit' value='".CHATBOX_L4."' />\n<input class='button' type='reset' name='reset' value='".CHATBOX_L5."' />";
if($pref['cb_emote']){
$texta .= " \n<input class='button' type ='button' style='cursor:hand; cursor:pointer' size='30' value='".CHATBOX_L14."' onclick='expandit(this)' />\n<span style='display:none;'>".emote()."\n</span>\n";
}
$texta .="</p>\n</form>\n</div>\n";
}
if($emessage != ""){
$texta .= "<div style='text-align:center'><b>".$emessage."</b></div>";
}
if(!$text = retrieve_cache("chatbox")){
$chatbox_posts = $pref['chatbox_posts'];
global $nickstore;
if($sql -> db_Select("chatbox", "*", "ORDER BY cb_datestamp DESC LIMIT 0, ".$chatbox_posts, $mode="no_where")){
$obj2 = new convert;
$cb_wordwrap = $pref['cb_wordwrap'];
$sql2 = new db;
while(list($cb_id, $cb_nick, $cb_message, $cb_datestamp, $cb_blocked, $cb_ip) = $sql-> db_Fetch()){
// get available vars
$cb_nick = eregi_replace("[0-9]+\.", "", $cb_nick);
if($cb_nick == "Anonymous"){
$cuser_id = 0;
}else{
if($nickstore[$cb_nick]){
$cb_nick = "<a href='".e_BASE."user.php?id.".$nickstore[$cb_nick]."'>".$cb_nick."</a>";
}else{
if($sql2 -> db_Select("user", "*", "user_name='$cb_nick'")){
list($cuser_id, $cuser_name) = $sql2-> db_Fetch();
$nickstore[$cb_nick] = $cuser_id;
$cb_nick = "<a href='".e_BASE."user.php?id.".$cuser_id."'>".$cb_nick."</a>";
}else{
$cb_nick = $aj -> tpa($cb_nick);
}
}
}
$datestamp = $obj2->convert_date($cb_datestamp, "short");
$search[0] = "["; $search[1] = "]";
$replace[0] = "["; $replace[1] = "]";
$cb_message = str_replace($search, $replace, $cb_message);
if($pref['cb_linkreplace']){
$cb_message = " ".$cb_message;
$cb_message = preg_replace("#([\t\r\n ])([a-z0-9]+?){1}://([\w\-]+\.([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*)?)#i", '\1<a href="\2://\3">'.$pref['cb_linkc'].'</a>', $cb_message);
$cb_message = preg_replace("#([\t\r\n ])(www|ftp)\.(([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*)?)#i", '\1<a href="http://\2.\3">'.$pref['cb_linkc'].'</a>', $cb_message);
$cb_message = preg_replace("#([\n ])([a-z0-9\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $cb_message);
}
$cb_message = $aj -> tpa($cb_message);
if(!eregi("<a href|<img|&#", $cb_message)){
$message_array = explode(" ", $cb_message);
for($i=0; $i<=(count($message_array)-1); $i++){
if(strlen($message_array[$i]) > $cb_wordwrap){
require_once(e_HANDLER."textparse/basic.php");
$etp = new e107_basicparse;
$message_array[$i] = wordwrap( $etp->unentity($message_array[$i]), $cb_wordwrap, "<br />", 1);
}
}
$cb_message = implode(" ",$message_array);
}
$replace[0] = "["; $replace[1] = "]";
$search[0] = "["; $search[1] = "]";
$cb_message = str_replace($search, $replace, $cb_message);
global $CHATBOXSTYLE;
if(!$CHATBOXSTYLE){
// default chatbox style
$CHATBOXSTYLE = "<!-- chatbox -->\n<div class='spacer'>
<img src='".THEME."images/bullet2.gif' alt='' /> <b>{USERNAME}</b><br /><span class='smalltext'>{TIMEDATE}</span><br /><div class='smallblacktext'>{MESSAGE}</div></div><br />\n";
}
$search[0] = "/\{USERNAME\}(.*?)/si";
$replace[0] = $cb_nick;
$search[1] = "/\{TIMEDATE\}(.*?)/si";
$replace[1] = $datestamp;
$search[2] = "/\{MESSAGE\}(.*?)/si";
$replace[2] = ($cb_blocked ? CHATBOX_L6 : $cb_message);
$text .= preg_replace($search, $replace, $CHATBOXSTYLE);
// $text .= $aj -> formtparev($str, "public");
// $text .= stripslashes($str);
}
}else{
$text .= "<span class='mediumtext'>".CHATBOX_L11."</span>";
}
$total_chats = $sql -> db_Count("chatbox");
if($total_chats > $chatbox_posts){
$text .= "<br /><div style='text-align:center'><a href='".e_BASE."chat.php'>".CHATBOX_L12."</a> (".$total_chats.")</div>";
}
set_cache("chatbox", $text);
}
if(ADMIN && getperms("C")){$text .= "<br />[ <a href='".e_ADMIN."chatbox.php'>".CHATBOX_L13."</a> ]";}
$caption = (file_exists(THEME."images/chatbox_menu.png") ? "<img src='".THEME."images/chatbox_menu.png' alt='' /> ".CHATBOX_L2 : CHATBOX_L2);
$text = ($pref['cb_layer'] ? $texta."<div style='border : 0; padding : 4px; width : auto; height : ".$pref['cb_layer_height']."px; overflow : auto; '>".$text."</div>" : $texta.$text);
$ns -> tablerender($caption, $text);
function emote(){
$sql = new db;
$sql -> db_Select("core", "*", "e107_name='emote'");
$row = $sql -> db_Fetch(); extract($row);
$emote = unserialize($e107_value);
$str="<br />";
$c=0;
while(list($code, $name) = @each($emote[$c])){
if(!$orig[$name]){
$code = htmlentities($code);
$str .= "\n<a href=\"javascript:caddtext(' $code')\"><img src=\"".e_IMAGE."emoticons/$name\" style=\"border:0; padding-top:2px;\" alt=\"\" /></a> ";
$orig[$name] = TRUE;
}
$c++;
}
return $str;
}
echo "
<script type='text/javascript'>
function caddtext(sc){
document.getElementById('chatbox').cmessage.value +=sc;
}
</script>"; |
Ringrazio anticipatamente.
 |
|
Top |
|
 |
horus Macchinista


Registrato: 22/03/05 10:48 Messaggi: 2554 Residenza: Sirio e dintorni
|
Inviato: 24 Mar 2006 10:59 Oggetto: |
|
|
Si resetta vuol dire che cancella tutti i messaggi?
Per fare il refresh di una chat indipendentemente dalla pagina ci sono diverse possibilità:
1) metti la chat in un iframe;
2) metti un iframe nascosto che si ricarica e chiede al server i messaggi della chat, poi via javascript li inserisci nella chat (la mia preferita);
3) usi Ajax;
4) usi una chat java;
5) usi una chat flash;
6) forse altro che non mi viene in mente.
Se usi un plugin e questo non lo prevede è un bel problema perché vuol dire che o trovi un altro plugin oppure ti scrivi tu la chat. |
|
Top |
|
 |
mirrors Mortale adepto

Registrato: 20/03/06 17:06 Messaggi: 33
|
Inviato: 24 Mar 2006 11:21 Oggetto: Chat rinfrescata |
|
|
horus ha scritto: | Si resetta vuol dire che cancella tutti i messaggi?
Per fare il refresh di una chat indipendentemente dalla pagina ci sono diverse possibilità:
1) metti la chat in un iframe;
2) metti un iframe nascosto che si ricarica e chiede al server i messaggi della chat, poi via javascript li inserisci nella chat (la mia preferita);
3) usi Ajax;
4) usi una chat java;
5) usi una chat flash;
6) forse altro che non mi viene in mente.
Se usi un plugin e questo non lo prevede è un bel problema perché vuol dire che o trovi un altro plugin oppure ti scrivi tu la chat. |
Ciao, Horus.
No, intendevo dire che si rinfresca ma non cancella i messaggi.
Ora funziona, come dicevo sopra, che qualcuno scrive e, quando cambi pagina, vedi se e ciò che ha scritto. Se rimani a leggere una news che si trova in Home, SEMPRE, non vedi nulla di nuovo e, spesso te ne accorgi...mai e l'interazione va farsi friggere...
Il Portale è della famiglia E107.
Ho postato anche sul loro Forum per vedere se qualcuno risolveva il problema ma...
Te l'ho detto, siete voi gli unici che mi hanno risposto in anni di frequentazione di Forum...
Si tratta di un Plugin, ma è anche vero che posso scrivere io un Plugin...
Ci dovrebbe essere addirittura un Help per farlo.
Credo che sia questa l'unica soluzione.
Nel codice che ho allegato, vedi qualche "buco" dove poter introdurre il comando di refresh?
Io no, anche se sono un novellino ma di quelli tosti.
E' probabile che possa, semplicemente utilizzando la parte delle query del plugin originale, introdurre una chat javascript. Che ne pensi?
Anche sul fronte della sicurezza e della "manegevolezza come Admin.
Che significa questo: Codice: | function caddtext(sc) | nel javascript che chiude lo script allegato? Non posso introdurre un javascript che fa refresh? Se sì, quale?
Ora la Chat è moderata: posso cancellare i messaggi, fare il prune, bloccare gli IP indersiderati (già dovuto fare molto spesso...).
Se la cambio tutto questo rimane?
Io credo che il problema sia troppo complesso per me, ma posso provare.
Che ne pensi?
Intanto grazissime per la celerità, la cortesia e la competenza.
Un abbraccio.
Giorgio |
|
Top |
|
 |
|
|
Non puoi inserire nuovi argomenti Non puoi rispondere a nessun argomento Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi
|
|