Chat anpassen

Bei Problemen zu EasyHP wird dir hier gerne geholfen.

Moderator: Supporter

matze93
Inaktiv
Beiträge: 314
Registriert: 21. Januar 2009, 14:10

Re: Chat anpassen

Beitrag von matze93 »

Wie kann ich die Größe des Chats anpassen? Wenn ich den Iframe verkleinere?
Benutzeravatar
daniel
Ehemaliger
Beiträge: 413
Registriert: 13. März 2008, 16:49
Wie bist du auf EasyHP gekommen?: Werbung auf phpBB.de
Wohnort: Bremen
Kontaktdaten:

Re: Chat anpassen

Beitrag von daniel »

Hallo matze93,

Weiß ich im moemnt garnicht. versuch es erstmal mit veränderung der Iframegröße. Warscheinlich musst du die CSS-Eigenschaften in der chat.html noch anpassen.
Der linke Bereich ist #chat und der rechte #userlist. Versteht sich ja eigentlich von selbst.

MfG.: Daniel
Benutzeravatar
daniel
Ehemaliger
Beiträge: 413
Registriert: 13. März 2008, 16:49
Wie bist du auf EasyHP gekommen?: Werbung auf phpBB.de
Wohnort: Bremen
Kontaktdaten:

Re: Chat anpassen

Beitrag von daniel »

jetzt hab ich das als Mod veröffentlicht:
http://www.easyhp.org/forum/viewtop ... f=16&t=350

Da wir unseren Chat jetzt wieder aktiviert haben, wird er jetzt von mir auch wieder weiterentwickelt. Der Fehler, dass die Userliste nicht auftaucht ist zB. weg und die Chatbefehle sind hinzugekommen.
matze93
Inaktiv
Beiträge: 314
Registriert: 21. Januar 2009, 14:10

Re: Chat anpassen

Beitrag von matze93 »

Macht es dir etwas aus, wenn ich daran noch ein bisschen rumbastle (ich habe bald Ferien).
Ich will Smileys und BBCodes hinzufügen und das Design verbessern.
Benutzeravatar
daniel
Ehemaliger
Beiträge: 413
Registriert: 13. März 2008, 16:49
Wie bist du auf EasyHP gekommen?: Werbung auf phpBB.de
Wohnort: Bremen
Kontaktdaten:

Re: Chat anpassen

Beitrag von daniel »

Hallo matze93,
nein. macht mir überhaupt nichts aus.

werde mal demnächst dazuschreiben, dass ich dass unter der GPL oder ähnlichem veröffentliche.
schön wäre es auch, wenn du das auch wiederum veröffentlichst und ich mir die Arbeit ersparen kann :D.

ich werde mich wohl in der hinsicht mal an die arbeit machen ein Bot-system zu entwickeln, die dann quasie als Module hinzugefügt werden können.

BB-Codes würde ich auch eher als Modul hinzufügen, oder deaktivierbar. (einfaches include "bbcodes.php" sollte da jann reichen, das auszukommentieren ;))

MfG.: Daniel
matze93
Inaktiv
Beiträge: 314
Registriert: 21. Januar 2009, 14:10

Re: Chat anpassen

Beitrag von matze93 »

Klar. Aber mit den BBCodes könnte es vielleicht ein bisschen anders gelöst werden. Vielleicht gebe ich Usern nur Farbformatrieungen und Schriftart zur Verfügung, Admin und Mods können alles nuten. Also auch Schriftgröße, Unterstreichen, Fettdruck und Krusiv. Hab ich irgendetwas vergessen?
matze93
Inaktiv
Beiträge: 314
Registriert: 21. Januar 2009, 14:10

Re: Chat anpassen

Beitrag von matze93 »

Also die chat.php sieht dann so aus:

Code: Alles auswählen

<?php

define("IN_EASYHP", true);
include "../includes/mysql.php";
$chat = 1;
include "../common.php";

if (($cf->chat_aktiv != 1 and !isset($_SESSION['user_data_admin'])) or $uname == 'Anonymous' or !$userdata)
{
	header("Location: ../index.php");
	print "chat.innerHTML = '<br /><a href=../index.php >zur&uuml;ck zur Hauptseite</a>';";
	print "<a href=../index.php >zur&uuml;ck zur Hauptseite</a>";
	exit();
}

// Chat script by WebTemp.org

// Start a session and get/generate a random user_id
// We'll use this user_id to create pseudo-uniquely colored chat lines later
// Close the session (a session can only be accessed by one process at a time)
error_reporting(0);
session_start();
header('Cache-control: private'); // IE6 fix
header("Content-Type: text/html; charset=utf-8");
if (!isset($_SESSION['USER_ID'])) $_SESSION['USER_ID'] = rand(1, 24);
$USER_ID = $_SESSION['USER_ID'];
session_write_close();
ob_flush();
flush();

// Path to the text files holding the chat window content
$fn = 'chat.txt';
$log = 'log.txt';

// Did the browser request the chat content?
// If so, it provided this script with its last known line number
$read = &$_GET['r'];
if (isset($read)) {
  // Create the chat file if neccessary
  if (!file_exists($fn)) {
    touch($fn);
    chmod($fn, 0644);
  }
  if ($read == 0)
  {
	$result = @mysql_query("SELECT `im_chat` FROM ".SESSIONS_TABLE." WHERE `name` = '".$userdata['name']."' AND `im_chat` = -1");
	if (mysql_num_rows($result) == 0)
		chat_write('<E>');
}
  // The script will not exit on its own on user disconnect
  // this way we can later add a "user left chat" message
  ignore_user_abort(true);
  $i = 0;
  while (true) {
    // Open the chat file and get the current line number
    $f = fopen($fn, 'r');
    flock($f, 2);
    $offset = 0;
    $offset = trim(fgets($f));
    // Break the loop if the browser is not up to date
    if ($offset > $read) break;
    // If the browser is up to date, wait
    flock($f, 3);
    fclose($f);
    @set_time_limit(0);
    // By default we wait 3 seconds between each check
    // However, after one minute of complete silence in the chat we step
    // back to 10 second periods to save server resources
    if ($i > 20) sleep(10);
    else sleep(3);
    // To check for user disconnection we have to output at least one byte
    // We'll echo a line break since this does no harm to our JavaScript
    echo "\n";
    ob_flush();
    flush();
	$result = @mysql_query("SELECT `name` FROM ".SESSIONS_TABLE." WHERE `chat_session` < ".(time()-300)." AND `im_chat` = 1");

	$i = 0;
	while ($user_row = mysql_fetch_assoc($result))
	{
		chat_write('<L>');
		@mysql_query("UPDATE ".SESSIONS_TABLE." SET `im_chat` = 0 WHERE `name` = '".$user_row['name']."'");
	}
	$result2 = mysql_query("SELECT `name` FROM ".SESSIONS_TABLE." WHERE `im_chat` = 1");
	$i = 0;
	while ($user = mysql_fetch_assoc($result2))
	{
		$result = @mysql_query("SELECT `id`, `level`, `name` FROM ".USERS_TABLE." WHERE `name` = '".$user['name']."'");
		$user_row = mysql_fetch_assoc($result);
		$link = "<a class=\"user_link\" target=\"_blank\" href=\"../profile.php?mode=view&user_id=".$user_row['id']."\" >".$user_row['name']."</a>";
		echo utf8_encode("us('".$i."','".$link."', ".$user_row['level'].");");
		$i++;
	}
    if (connection_status() != 0) {
      // This is where a user disconnection is detected
      // You could add stuff to display "user left chat" messages here
      chat_write('<L>');
	  @mysql_query("UPDATE ".SESSIONS_TABLE." SET `im_chat` = 0 WHERE `name` = '".$userdata['name']."'");
	  exit();
    }
    $i++;
  }
  
  	@mysql_query("UPDATE ".SESSIONS_TABLE." SET `im_chat` = 1, `chat_session`=".time()." WHERE `name` = '".$userdata['name']."' and `im_chat` != -1");
	$result = @mysql_query("SELECT `im_chat`, `name` FROM ".SESSIONS_TABLE." WHERE `im_chat` != 0");
	if (!$result)
		echo utf8_encode("us(0,'Verbindung zur Datenbank konnte nicht aufgebaut werden');");
	$i = 0;
	while ($user_row = mysql_fetch_assoc($result))
	{
		if ($user_row['im_chat'] == "-1" and $userdata['name'] == $user_row['name'])
		{
			$time = date('H:i:s');
			echo utf8_encode(own_write("Du bist gekickt worden. Für mehr infos wende dich an den Administrator der Seite", 1));
			exit();
		}
		$i++;
	}
  // If the loop was exited, we end up here
  // Now, echo all missing lines
  while ($s = fgets($f)) {
    echo utf8_encode($s);
    if ($offset <= ++$read) break;
  }
  // Close the file, exit
  flock($f, 3);
  fclose($f);
  exit();
}

// This function writes one line into the chat file
// For easiest accessibility newer lines are on top!
function chat_write($write, $system = 0) {
  global $USER_ID, $fn, $userdata, $log;
  // Maximum line count
  $maxlines = 25;
  if (trim($write) == '') return;
  // Create the chat file if neccessary
  if (!file_exists($fn)) {
    touch($fn);
    chmod($fn, 0644);
  }
    // Create the chat file if neccessary
  if (!file_exists($log)) {
    touch($log);
    chmod($log, 0644);
  }
  // Open the chat file and get the current line number
  $f = fopen($fn, 'r+');
  flock($f, 2);
  $offset = 0;
  fscanf($f, "%s\n", $offset);
  
  // Open the log file
  $l = fopen($log, 'a');
  flock($l, 2);
  // Increase by one as we're adding a new line now
  $offset++;
  $i = 0;
  $chat = '';
  // First we have to read the whole file
  // Lines are being read one by one until we're at the end or until we reach $maxlines
  while (($i < $maxlines) && ($s = fgets($f))) {
    $chat .= $s;
    $i++;
  }
  // This is the actual line we're adding
  // You see: The chat file contains JavaScript calls
  // This way no parsing of the lines is neccessary
  // We'll just need to eval() them in our JavaScript
  $time = date('H:i:s');
 
		//
		// For the smilies :-)
		//
		$write = str_replace("#:-)", "<img src='../images/smiles/icon_smile.gif' alt='smile' title='Smile' border='0' />", $write);
		$write = str_replace("#:D", "<img src='../images/smiles/icon_biggrin.gif' alt='biggrin' title='Big grin' border='0' />", $write);
		$write = str_replace("#conf", "<img src='../images/smiles/icon_confused.gif' alt='confused' title='Confused' border='0' />", $write);
		$write = str_replace("#cool", "<img src='../images/smiles/icon_cool.gif' alt='cool' title='Cool' border='0' />", $write);
		$write = str_replace("#cry", "<img src='../images/smiles/icon_cry.gif' alt='cry' title='Crying' border='0' />", $write);
		$write = str_replace("#eek", "<img src='../images/smiles/icon_eek.gif' alt='eek' title='Eek' border='0' />", $write);
		$write = str_replace("#evil", "<img src='../images/smiles/icon_evil.gif' alt='evil' title='Evil' border='0' />", $write);
		$write = str_replace("#frown", "<img src='../images/smiles/icon_frown.gif' alt='frown' title='Frown' border='0' />", $write);
		$write = str_replace("#lol", "<img src='../images/smiles/icon_lol.gif' alt='lol' title='lol' border='0' />", $write);
		$write = str_replace("#mad", "<img src='../images/smiles/icon_mad.gif' alt='mad' title='Mad' border='0' />", $write);
		$write = str_replace("#:-|", "<img src='../images/smiles/icon_neutral.gif' alt='neutral' title='Neutral' border='0' />", $write);
		$write = str_replace("#:P", "<img src='../images/smiles/icon_razz.gif' alt='razz' title='Razz' border='0' />", $write);
		$write = str_replace("#red", "<img src='../images/smiles/icon_redface.gif' alt='redface' title='Red face' border='0' />", $write);
		$write = str_replace("#roll", "<img src='../images/smiles/icon_rolleyes.gif' alt='rolleyes' title='Rolling eyes' border='0' />", $write);
		$write = str_replace("#:-(", "<img src='../images/smiles/icon_sad.gif' alt='sad' title='Sad' border='0' />", $write);
		$write = str_replace("#;-)", "<img src='../images/smiles/icon_wink.gif' alt='wink' title='Wink' border='0' />", $write);


		//
		// The BBCodes
		//
		$write = str_replace("[b]", "<b>", $write);
		$write = str_replace("[/b]", "</b>", $write);
		$write = str_replace("[i]", "<i>", $write);
		$write = str_replace("[/i]", "</i>", $write);
		$write = str_replace("[u]", "<u>", $write);
		$write = str_replace("[/u]", "</u>", $write);

  	  $link = "<a class=\"user_link\" target=\"_blank\" href=\"../profile.php?mode=view&user_id=".$userdata['id']."\" >".$userdata['name']."</a>";
	  if ($system == 0)
		$js = "cs($offset,$USER_ID,'$time','".$link."','$write','');\n";
	  else
		$js = "cs($offset,$USER_ID,'$time','System','$write von $link','');\n";
  // Go to the top
  fseek($f, 0);
  // Empty the file
  ftruncate($f, 0);
  // Write the new offset
  fwrite($f, "$offset\n");
  // Write the new line
  fwrite($f, $js);
  // And then the rest
  fwrite($f, $chat);
  // Close the file
  flock($f, 3);
  fclose($f);
  
  // Write the new line
  fwrite($l, $js);
  // Close the file
  flock($l, 3);
  fclose($l);
  
  // We'll return the last added line to the calling
  return $js;
}

function own_write($write, $system = 0) {
  global $USER_ID, $fn, $userdata, $log;

  	  $link = "<a class=\"user_link\" target=\"_blank\" href=\"../profile.php?mode=view&user_id=".$userdata['id']."\" >".$userdata['name']."</a>";
		$js = "cs(-1,$USER_ID,'$time','".$link."','$write','');\n";
  
  // We'll return the last added line to the calling
  return $js;
}

function chat_delete($delete) {
  global $fn;
  if ($delete == '') exit();
  if (!file_exists($fn)) {
    touch($fn);
    chmod($fn, 0644);
  }
  $f = fopen($fn, 'r+');
  flock($f, 2);
  $offset = 0;
  fscanf($f, "%s\n", $offset);
  $chat = '';
  $i = 0;
  while ($s = fgets($f)) {
    $s = str_replace("'$delete'", "''", $s);
    $chat .= $s;
    $i++;
  }
  fseek($f, 0);
  ftruncate($f, 0);
  fwrite($f, "$offset\n");
  fwrite($f, $chat);
  flock($f, 3);
  fclose($f);
}

// Did the browser send a new chat line?
$write = &$_POST['w'];
if (isset($write)) {
  if ($write == '') exit();
  // Remove the slashes that were added to the form contents by PHP automatically
  $write = stripslashes($write);
  // Transform characters like < and > into their HTML representations
  $write = htmlspecialchars($write, ENT_QUOTES);
  $write = addslashes($write);
  $system = 0;
  if ($userdata['level'] >= 1){
	  if (strpos($write, '/del ') === 0) {
		$delete = str_replace('/del ', '', $write);
		chat_delete($delete);
		exit();
	  }
	  elseif (strpos($write, '/ban ') === 0 and $userdata['level'] == 1) {
		$name = str_replace('/ban ', '', $write);
		
		$result = @mysql_query("SELECT `name` FROM ".SESSIONS_TABLE." WHERE `name` = '".$name."'");
		if (mysql_num_rows($result) == 0)
		{
			echo utf8_encode(own_write("Den User \'".$name."\' gibt es nicht", 1));
			exit();
		}
		echo utf8_encode(chat_write($name." wurde Systemweit gebannt", 1));
		@mysql_query("UPDATE ".SESSIONS_TABLE." SET `im_chat` = -1 WHERE `name` = '".$name."'");
		@mysql_query("UPDATE ".USERS_TABLE." SET `ban` = 1 WHERE `name` = '".$name."'");
		$system = 1;
		exit();
	  }
	  elseif (strpos($write, '/kick ') === 0) {
		$name = str_replace('/kick ', '', $write);
		
		$result = @mysql_query("SELECT `name` FROM ".SESSIONS_TABLE." WHERE `name` = '".$name."'");
		if (mysql_num_rows($result) == 0)
		{
			echo utf8_encode(own_write("Den User \'".$name."\' gibt es nicht", 1));
			exit();
		}
		echo utf8_encode(chat_write($name." wurde gekickt", 1));
		@mysql_query("UPDATE ".SESSIONS_TABLE." SET `im_chat` = -1, `chat_session` = ".(time()+300)." WHERE `name` = '".$name."'");
		$system = 1;
		exit();
	  }	  
	  elseif (strpos($write, '/unkick ') === 0 AND $userdata['level'] == 1) {
		$name = str_replace('/unkick ', '', $write);
		
		$result = @mysql_query("SELECT `name` FROM ".SESSIONS_TABLE." WHERE `name` = '".$name."'");
		if (mysql_num_rows($result) == 0)
		{
			echo utf8_encode(own_write("Den User \'".$name."\' gibt es nicht", 1));
			exit();
		}
		echo utf8_encode(chat_write($name." wurde geunkickt", 1));
		@mysql_query("UPDATE ".SESSIONS_TABLE." SET `im_chat` = 0 WHERE `name` = '".$name."'");
		$system = 1;
		exit();
	  }
	  elseif (strpos($write, '/kickall') === 0) {
		$name = str_replace('/kickall ', '', $write);
		
		echo utf8_encode(chat_write("Der Chat wird abgeschaltet", 1));
		@mysql_query("UPDATE ".SESSIONS_TABLE." SET `im_chat` = -1");
		@mysql_query("UPDATE ".CONFIG_TABLE." SET `chat_aktiv` = 0");
		$system = 1;
		exit();
	  }
	  elseif (strpos($write, '/unkickall') === 0 AND $userdata['level'] == 1) {
		$name = str_replace('/unkickall ', '', $write);
		
		echo utf8_encode(chat_write("Alle Kicks aufgehoben", 1));
		@mysql_query("UPDATE ".SESSIONS_TABLE." SET `im_chat` = 0");
		$system = 1;
		exit();
	  }
	  elseif (strpos($write, '/chat_activate') === 0 AND $userdata['level'] == 1) {
		$name = str_replace('/chat_activate', '', $write);
		
		echo utf8_encode(chat_write("Chat aktiviert", 1));
		@mysql_query("UPDATE ".CONFIG_TABLE." SET `chat_aktiv` = 1");
		$system = 1;
		exit();
	  }
	  elseif (strpos($write, '/') === 0) {
		echo utf8_encode(own_write("Befehl nicht gefunden oder du hast nicht die benötigten Rechte:<br />".$write, 1));
		exit();
	}
	}
$result = @mysql_query("SELECT `name` FROM ".SESSIONS_TABLE." WHERE `im_chat` = -1 AND `name` = '".$userdata['name']."'");
if (mysql_num_rows($result) >= 1)
{
	$time = date('H:i:s');
	echo utf8_encode(own_write("Du bist gekickt worden. Für mehr infos wende dich an den Administrator der Seite", 1));
	exit();
}
  // Wordwrap after 100 characters and add the new lines to the chat file
  $lines = wordwrap($write, 50, "\n", true);
  $lines = explode("\n", $lines);
  foreach ($lines as &$line) {
    // The function returns the added line
    // We'll output this so the users can read their own texts without delay right after sending
    echo utf8_encode(chat_write($line), $system);
  }
  exit();
}
//
//
//php ENDE
// Javascript ANFANG
//
//
?>
var lines    = 35;
var title    = '';
var offset   = 0;
var userNr   = 0;
var messages = new Array();
var message  = document.getElementById('message');
var befehl  = document.getElementById('befehl');
var rueckmeldung  = document.getElementById('rueckmeldung');
var chat     = document.getElementById('chat');
var userlist = document.getElementById('userlist');
var tmrRead  = setTimeout('chat_read();', 1000);
var user     = new Array();

function chat_action(action)
{
	if (action == "kick" || action == "ban" || action == "unkick")
		action1 = "/"+action + " " + befehl.value;
	else if (action == "kickall" || action == "unkickall")
		action1 = "/"+action;
	else
		action1 = "/";
	request_write('chat.php', 'w='+escape(action1));
	befehl.value = '';
}

//Verbindung zum schreiben
function request_write(url, post) {
  r = false;
  if (window.XMLHttpRequest) {
    r = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    try {
      r = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {
        r = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
      }
    }
  }
  if (!r) return false;
  r.onreadystatechange = alert_write;
  if (post == null) {
    r.open('GET', url, true);
    r.send(null);
  } else {
    r.open('POST', url, true);
    r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    r.send(post);
  }
}

function alert_write() {
  try {
    if ((r.readyState == 4) && (r.status == 200)) parse(r.responseText);
  } catch(e) {
  }
}

//Verbindung zum lesen
function request_read(url, post) {
  r2 = false;
  if (window.XMLHttpRequest) {
    r2 = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    try {
      r2 = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {
        r2 = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
      }
    }
  }
  if (!r2) return false;
  r2.abort();
  r2.onreadystatechange = alert_read;
  if (post == null) {
    r2.open('GET', url, true);
    r2.send(null);
  } else {
    r2.open('POST', url, true);
    r2.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    r2.send(post);
  }
}

//Verbindungzum User auslesen
function request_user(url, post) {
  r3 = false;
  if (window.XMLHttpRequest) {
    r3 = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    try {
      r3 = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {
        r3 = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
      }
    }
  }
  if (!r3) return false;
  r3.abort();
  r3.onreadystatechange = alert_user;
  if (post == null) {
    r3.open('GET', url, true);
    r3.send(null);
  } else {
    r3.open('POST', url, true);
    r3.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    r3.send(post);
  }
}

function us(o, u, r) {
    team = "";

	if (r == 1 || r == 2)
		team = "(team)";
	user[o] = '<span id="C">'+u+'</span> '+team+'<br />';
}

function user_display() {
  html2 = '<b>Userliste:</b><br /><br />';
  if (user.length == 0)
		user[0] = 'wird geladen ...';
  for (var i = 0; i < user.length; i++) {
	i2 = i+"";
    html2 = html2 + user[i2];
  }
  userlist.innerHTML = html2;
  user = new Array();
}

function alert_read() {
  clearTimeout(tmrRead);
  try {
    if ((r2.readyState == 4) && (r2.status == 200)) {
      parse(r2.responseText);
      tmrRead = setTimeout('chat_read();', 30);
    }
  } catch(e) {
    tmrRead = setTimeout('chat_read();', 3000);
  }
}

function chat_read() {
  clearTimeout(tmrRead);
  request_read('chat.php?r='+offset, null); 
}

function keyup(e) {
  if (window.event) k = window.event.keyCode;
  else if (e) k = e.which;
  else return true;
  if (k == 13) chat_write();
}

function chat_display() {
  html = '';
  i = 0;
  while ((i < lines) && (i < offset)) {
    h = offset-i;
    if (messages[h]) html = messages[h] + html;
    i++;
  }
  chat.innerHTML = html;
  if (title != '') {
    title = title.replace(/&/g, '&');
    title = title.replace(/"/g, '"');
    title = title.replace(/'/g, '\'');
    title = title.replace(/</g, '<');
    title = title.replace(/>/g, '>');
    document.title = title + ' - Chat by WebTemp.org';
  }
}

function chat_write() {
  request_write('chat.php', 'w='+escape(message.value));
  message.value = '';
}

function del_hinweis()
{
	rueckmeldung.innerHTML = "";
}

function cs(o, i, t, u, m, c) {
user_display();
if (o == -1)
{
	//alert(m);
	rueckmeldung.innerHTML = '<input type="button" value="x" onclick="del_hinweis();" /><b>Meldung vom Server:</b> '+m;
}
  else if (m == '<E>') {
    if (u != '') messages[o] = '<span id="C'+i+'">['+t+'] * '+u+' has entered the chat *</span><br />';
  } else if (m == '<L>') {
    if (u != '') messages[o] = '<span id="C'+i+'">['+t+'] * '+u+' has left the chat *</span><br />';
  } else {
    if (u != '') {
      u += ':';
      spaces = 5 - u.length;
      for (j = 0; j < spaces; j++) u += "&nbsp;";
      u += ' ';
    }
    if (title == '') title = m;
    m = m.replace(/ /g, '&nbsp;');
    messages[o] = '<span id="C'+i+'">['+t+'] '+u+'<b>'+m+'</b></span><br />';
  }
  if (o > offset) {
    offset = o;
    window.focus();
    message.focus();
  }
}

function parse(s) {
  if (s != '') {
    var l = user.length;
	for (var i = 0; i < l; i++) {
		user.pop();
	}
	s = unescape(s);	
    eval(s);
    chat_display();
	user_display()
  }
}

Ist da ein Fehler? Ich sehe immer etwas, wenn etwas geschreiben wird, außer wenn ich Smileys verwende, dann sehe ich kein Text und kein Bild
Benutzeravatar
daniel
Ehemaliger
Beiträge: 413
Registriert: 13. März 2008, 16:49
Wie bist du auf EasyHP gekommen?: Werbung auf phpBB.de
Wohnort: Bremen
Kontaktdaten:

Re: Chat anpassen

Beitrag von daniel »

inzwischen habe ich die Entwicklung des chats wieder eingestellt und auch wieder aufgenommen. Für Die Smilies habe ich die Methode gewählt, dass diese erst bei der Darstellung durch Javascript ersetzt werden.

Dafür werden diese beiden Funktionen benutzt:

Code: Alles auswählen

function SuchenUndErsetzen(QuellText, SuchText, ErsatzText)
	{   // Erstellt von Ralf Pfeifer
		// Fehlerpruefung
		if ((QuellText == null) || (SuchText == null))           { return null; }
		if ((QuellText.length == 0) || (SuchText.length == 0))   { return QuellText; }

		// Kein ErsatzText ?
		if ((ErsatzText == null) || (ErsatzText.length == 0))    { ErsatzText = ""; }

		var LaengeSuchText = SuchText.length;
		var LaengeErsatzText = ErsatzText.length;
		var Pos = QuellText.indexOf(SuchText, 0);

		while (Pos >= 0)
		{
			QuellText = QuellText.substring(0, Pos) + ErsatzText + QuellText.substring(Pos + LaengeSuchText);
			Pos = QuellText.indexOf(SuchText, Pos + LaengeErsatzText);
		}
		return QuellText;
}

function smilies(str){
    str = SuchenUndErsetzen(str ,":)", "<img src=\"Pfad_zum_Bild.gif\" />");
    ....
    return str;
}
und in der Funktion cs muss dann natürlich vor dem ausgeben in dieser Zeile:

Code: Alles auswählen

messages[o] = '<span id="C'+i+'">['+t+'] '+u+'<b>'+m+'</b></span><br />';
diese Zeile eingefügt werden:

Code: Alles auswählen

m = smilies(m)
Ich benutze den Chat im moment auch nur für einen Seite ohne EasyHP. deshalb weiß ich nicht, wann ich die Weiterentwicklung des Mods voranbringen kann. Aber ich denke, dass ich in der nächsten Zeit eine neue Version mit einer Schnittstelle für Chatbots anbieten kann. sobald ich diese Schnittstelle für EasyHP und das andere CMS fertiggestellt habe, werden die Bots warscheinlich auch leicht portierbar sein.

Für die BBCodes würde ich noch eine Überprüfung einbauen, ob auch wirklich anfangs und Endtag gesetzt wurden, da sonst eventuell der chat völlig falsch formatiert wird.

Code: Alles auswählen

if (strpos($write, '[b]') and strpos($write, '[/b]'))
{
	$write = str_replace("[b]", "<b>", $write);
	$write = str_replace("[/b]", "</b>", $write);
}else
{
	$write = str_replace("[b]", "", $write);
	$write = str_replace("[/b]", "", $write);
}
Damit man das nicht immer einzelnt machen muss, das ganze für alle bbcodes in der Schleife:

Code: Alles auswählen

$bbcodes = array("b", "i", "u");
for ($i= 0;$i<count($bbcodes);$i++)
{
	$bb = $bbcodes[$i];
	if (strpos($write, '['.$bb.']') and strpos($write, '[/'.$bb.']'))
	{
		$write = str_replace("[".$bb."]", "<".$bb.">", $write);
		$write = str_replace("[/".$bb."]", "</".$bb.">", $write);
	}else
	{
		$write = str_replace("[".$bb."]", "", $write);
		$write = str_replace("[/".$bb."]", "", $write);
	}
}
PS.: noch ungetestet

matze93:
Hast du denn inzwischen Fortschritte gemacht?
Antworten