Перейти к контенту

[2.1.x]ElfChat - модуть ajax чата для форума


Рекомендуемые сообщения

ntrtv: Есть чат d12 shoutbox, там это есть. Сам чат бесплатный.
не хотел бы я такой чат второй раз хакнутым быть есть не очень хорошо!)))А вот этот уже по интересней!На 2.2.2 пойдёт этот чат?
Ссылка на комментарий
Поделиться на других сайтах

  • Ответы 324
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

archtod: чат нормально работает при прямых руках и прямом хостере :D

 

автор сначала написал что он совместим с 2.2.х

 

хорошо что на локалхосте сначала попробовал поставить.

 

потом он убрал эту надпись.

 

 

 

ждем версии для 2.2.х

Ссылка на комментарий
Поделиться на других сайтах

xWanderer, версия для 2.2.x уже есть. :D С небольшими исправлениями

это радует ;)

а где ее взять то можно? что-то я в архиве файлов не нашел..... то что там есть, то все старое.

Ссылка на комментарий
Поделиться на других сайтах

Небольшая доработка (ВВ-коды, статусы, шаблоны фраз, поп-ап со смайлами)

Изменения производятся в уже установленном моде!

 

Скрин - <a href="http://hundredmc.ru/elf.jpg" target="_blank">http://hundredmc.ru/elf.jpg</a>

 

в файле skin_elfchat.php находим

===========================================================================

// <ips:main:desc:>

//===========================================================================

 

Заменяем всю фунцию на:

function main($lastID=-1,$title="",$text="",$online="",$smile="",$backslide=0,$smile_size=40) {
$IPBHTML = "";
//--starthtml--//


$IPBHTML .= <<<EOF


<html>
	<head>
			<meta http-equiv="content-type" content="text/html; charset=<% CHARSET %>" />
			<title>{$title}</title>
			<% CSS %>
			<script type="text/javascript" src='jscripts/Subsys_JsHttpRequest.js'></script>
			<script type="text/javascript" src='jscripts/js_elfchat.js'></script>
			<script type="text/javascript" src='jscripts/ipb_global.js'></script>

			<script type="text/javascript">
<!--
var GetChaturl = "{$this->ipsclass->base_url}automodule=elfchat&CODE=load";
var SendChaturl = "{$this->ipsclass->base_url}automodule=elfchat&CODE=send";
var OnlChaturl = "{$this->ipsclass->base_url}automodule=elfchat&CODE=online";
var i_sending =  "{$this->ipsclass->lang['sending']}";
var i_upsend =  "{$this->ipsclass->lang['upsend']}";
var i_only_to = "{$this->ipsclass->lang['only_to']}";
var i_you = "{$this->ipsclass->lang['you']}";
var i_sleep = "{$this->ipsclass->lang['sleeping']}";
var i_act_status = "{$this->ipsclass->lang['act_status']}";
var lastID = $lastID;
var backSlide = $backslide;
var ipb_var_base_url	  = "{$this->ipsclass->base_url}s=&";
var ipb_var_image_url	 = "style_images/1";
window.onload = init_chat;
-->
			</script>
	</head>
	<body>

					<form name="chatForm" onsubmit="sendComment();return false;" enctype='multipart/form-data'>
							<input id="to_user_id" type="hidden" value="0">
							<div class="borderwrap">
									<div class="maintitle">
											<p class="expand"><a href="{$this->ipsclass->base_url}automodule=elfchat&CODE=logout" onclick="exit();">{$this->ipsclass->lang['exit']}</a></p>
											<p><{CAT_IMG}> {$title}</p>
									</div>
									<table class='ipbtable' cellspacing="1">
											<tr height="25">
													<th align="left">
													<div style='float:right'><a href="{$this->ipsclass->base_url}automodule=elfchat&CODE=archive">{$this->ipsclass->lang['archive']}</a>
													<a href="#" onclick='document.getElementById("help").style.display="block"'>{$this->ipsclass->lang['help']}</a></div>
													<div>{$this->ipsclass->lang['log']}<span id="infoc">0/0</span> <span id="conect_span" style="display:none;color:#FF0000;">{$this->ipsclass->lang['conect']}</span></div>
													</th>

													<th align="right"  colspan="2">
															<a href="#" onclick="onc();">{$this->ipsclass->lang['reset']}</a></th>
											</tr>
											<tr>
													<td class="row2">
															<div id="outputList" style='height:500;overflow:auto'>$text</div>
															$smile  <a href='#' onClick="window.open(ipb_var_base_url+'act=legends&CODE=emoticons', 'Legends', 'width=250,height=500,resizable=yes,scrollbars=yes,top=0,left=0'); ">Показать все</a>
													</td>

													<td width="200" class="row1" valign="top">
															<div id="onlineList">$online</div>
													</td>
											</tr>
											<tr>
													<td class="formsubtitle">
													<div style="float: left;" style="padding-top:10px">
													  {$this->ipsclass->lang['speak_to']} <a href="#" id="to_all" onclick="java script:speak_to_all();" style="border:#000000 dotted 1px;">{$this->ipsclass->lang['to_all']}</a> <a href="#" onclick="java script:speak_to_user();" id="to_user"></a></font>
												 </div>
													  <div align="right">
															<select name='stat' class='codebuttons' onchange="alterfrase(this.options[this.selectedIndex].value, '/статус ')" align=right>
															<option value='0'>СТАТУС</option>
															<option value=СКУЧАЮ>СКУЧАЮ<option value=ИЩУ ДРУГА>ИЩУ ДРУГА<option value=ИЩЕМ ТАЛАНТЫ>ИЩЕМ ТАЛАНТЫ<option value=ИЩУ ГОСПОДА>ИЩУ ГОСПОДА<option value=ЖДУ ТЕБЯ>ЖДУ ТЕБЯ<option value=В ПРИВАТЕ>В ПРИВАТЕ<option value=ЗАНЯТ(А)>ЗАНЯТ(А)<option value=СКОРО УЙДУ>СКОРО УЙДУ<option value=УЛЫБАЮСЬ>УЛЫБАЮСЬ<option value=СМЕЮСЬ>СМЕЮСЬ<option value=РЖУ>РЖУ<option value=МНЕ ВЕСЕЛО>МНЕ ВЕСЕЛО<option value=ВСЕ ОТЛИЧНО>ВСЕ ОТЛИЧНО<option value=НА 7-М НЕБЕ>НА 7-М НЕБЕ<option value=ЗЛЮСЬ>ЗЛЮСЬ<option value=ПЛАЧУ>ПЛАЧУ<option value=СЕРЖУСЬ>СЕРЖУСЬ<option value=ПОМОГИТЕ!>ПОМОГИТЕ!<option value=КОЛБАСИТ>КОЛБАСИТ<option value=РАБОТАЮ>РАБОТАЮ<option value=БОЛЕЮ>БОЛЕЮ<option value=ДЕЛАЮ УРОКИ>ДЕЛАЮ УРОКИ<option value=ЧИТАЮ ФОРУМ>ЧИТАЮ ФОРУМ<option value=КУРЮ>КУРЮ<option value=СПЛЮ>СПЛЮ<option value=ОТДЫХАЮ>ОТДЫХАЮ<option value=КУШАЮ>КУШАЮ<option value=НА ТЕЛЕФОНЕ>НА ТЕЛЕФОНЕ<option value=ПАРЮСЬ>ПАРЮСЬ<option value=ПЬЮ ПИВО>ПЬЮ ПИВО<option value=ПЬЮ ВОТКУ>ПЬЮ ВОТКУ<option value=С БУДУНА>С БУДУНА<option value=ХОЧУ КУШАТЬ>ХОЧУ КУШАТЬ<option value=ХОЧУ СЕКСА>ХОЧУ СЕКСА
													</select>
													<select name='phr' class='codebuttons' onchange="alterfrase(this.options[this.selectedIndex].value, '')" align=right>
															<option value='0'>ФРАЗЫ</option>
															<option value=Всем привет!>Всем привет!<option value=Как жизнь?>Как жизнь?<option value=Афтар, выпей йаду>Афтар, выпей йаду<option value=Зачот!>Зачот!<option value=Ржунимагу>Ржунимагу<option value=Фтему!>Фтему!<option value=Фтопку!>Фтопку!<option value=Ниасилил>Ниасилил<option value=Плакаль!>Плакаль!<option value=Жжошь!>Жжошь!<option value=Учи албанский!>Учи албанский!<option value=Генитально>Генитально
													</select>
													</div>
															 </td>
													<td height="30" class="formsubtitle" colspan="2">
															<span id="infosend"></span>

													</td>
											</tr>
											<tr>
													<td class="formsubtitle" height="20" align="center">
															<input type="text" size="10" maxlength="500" id="chatbarText" style="width:100%">
<script type="text/javascript" language='javascript'>

var text_enter_url	  = "";
var text_enter_url_name = "";
var text_enter_image	= "";
var text_enter_email	= "";
var text_enter_flash	= "";
var text_code		   = "";
var text_quote		  = "";
var error_no_url		= "";
var error_no_title	  = "";
var error_no_email	  = "";
var error_no_width	  = "";
var error_no_height	 = "";
var prompt_start		= "";
</script>
 <input type='hidden' name='do' value='do_add' />
 <input type='hidden' name='id' value='' />

	 <script type='text/javascript' src='jscripts/ipb_cbbcode.js'></script>

	<input type='button' accesskey='b' value=' B ' onclick='simpletag("B")' class='codebuttons' name='B' style="font-weight:bold" />
	<input type='button' accesskey='i' value=' I ' onclick='simpletag("I")' class='codebuttons' name='I' style="font-style:italic" />
	<input type='button' accesskey='u' value=' U ' onclick='simpletag("U")' class='codebuttons' name='U' style="text-decoration:underline" />
	<input type='button' accesskey='g' value=' IMG '	 onclick='tag_image()'		  class='codebuttons' name='img' />
	<input type='button' accesskey='p' value=' CODE '	onclick='simpletag("CODE")'	class='codebuttons' name='CODE' />
	<input type='button' accesskey='q' value=' QUOTE '   onclick='simpletag("QUOTE")'   class='codebuttons' name='QUOTE' />
	<select name='ffont' class='codebuttons' onchange="alterfont(this.options[this.selectedIndex].value, 'FONT')">
	<option value='0'>ШРИФТ</option>
	<option value='Arial' style='font-family:Arial'>Arial</option>
	<option value='Times New Roman' style='font-family:Times'>Times</option>
	<option value='Courier New' style='font-family:Courier New'>Courier</option>
	<option value='Impact' style='font-family:Impact'>Impact</option>
	<option value='Georgia' style='font-family:Geneva'>Georgia</option>
	<option value='Lucida Console' style='font-family:Lucida Console'>Lucida</option>
	<option value='Comic Sans Ms' style='font-family:Comic Sans Ms'>Comic</option>
	</select>

	<select name='fsize' class='codebuttons' onchange="alterfont(this.options[this.selectedIndex].value, 'SIZE')"">
	<option value='0'>РАЗМЕР</option>
	<option value='1'>Маленький</option>
	<option value='7'>Большой</option>
	<option value='14'>Огромный</option>
	</select>
	<select name='fcolor' class='codebuttons' onchange="alterfont(this.options[this.selectedIndex].value, 'COLOR')">
	<option value='0'>ЦВЕТ</option>
	<option value='blue' style='color:blue'>Синий</option>
	<option value='red' style='color:red'>Красный</option>
	<option value='purple' style='color:purple'>Фиолетовый</option>
	<option value='orange' style='color:orange'>Оранжевый</option>
	<option value='yellow' style='color:yellow'>Желтый</option>
	<option value='gray' style='color:gray'>Серый</option>
	<option value='green' style='color:green'>Зеленый</option>
	</select>  <a href='java script:closeall();'>Закрыть все теги</a><br />
	<!--<input type='button' accesskey='l' value=' SQL '	 onclick='simpletag("SQL")'	 class='codebuttons' name='SQL'>
	<input type='button' accesskey='t' value=' HTML '	onclick='simpletag("HTML")'	class='codebuttons' name='HTML'>-->
	<input type='radio' class='radiobutton' name='bbmode' value='ezmode' onclick='setmode(this.value)' /> <b>Расширеный режим</b>
	<input type='radio' class='radiobutton' name='bbmode' value='normal' onclick='setmode(this.value)' checked="checked" /> <b>Нормальный режим</b>

</td>
													<td height="20" class="formsubtitle" colspan="2" align="left" valign="top">
															<input type="submit" id="submit" value="{$this->ipsclass->lang['send']}">



													</td>
											</tr>
									</table>
							</div>
					</form>

					<img src="style_images/<#IMG_DIR#>/topic_unselected.gif"> Powered by <a href="mailto:mr.elfet(cоbaka)gmail.com">
							Elfet</a> — <a href="http://elfet.mellon.ru">Elf-Chat</a> © 2006
			</div>
<div id='help' style='display:none;position:absolute;top:100;left:25%;width:50%;text-align:left;z-index:1;'>
			<div class="borderwrap">
							 <div class='maintitle'>
											  <div style='float:right'><a href='#' onclick='document.getElementById("help").style.display="none"'>[X]</a></div>
											  <div>{$this->ipsclass->lang['help']}</div>
							 </div>
											<div class='row1'>
															<p>{$this->ipsclass->lang['help_info']}</p>
											</div>
			</div>
</div>
	</body>
</html>

EOF;

//--endhtml--//
return $IPBHTML;
}

 

 

в папке jscripts создаём файл ipb_cbbcode.js

 

Вставляем:

//--------------------------------------------
// Set up our simple tag open values
//--------------------------------------------

var B_open = 0;
var I_open = 0;
var U_open = 0;
var QUOTE_open = 0;
var CODE_open = 0;
var SQL_open = 0;
var HTML_open = 0;

var bbtags   = new Array();

var fombj	= document.chatForm;


function get_easy_mode_state()
{
//--------------------------------------------
// Returns true if we've chosen easy mode
//--------------------------------------------

if ( fombj.bbmode[0].checked )
{
	return true;
}
else
{
	return false;
}
}


//==========================================
// Close all tags
//==========================================

function closeall()
{
if (bbtags[0])
{
	while (bbtags[0])
	{
		tagRemove = popstack(bbtags)
		fombj.chatbarText.value += "[/" + tagRemove + "]";

		//--------------------------------------------
		// Change the button status
		// Ensure we're not looking for FONT, SIZE or COLOR as these
		// buttons don't exist, they are select lists instead.
		//--------------------------------------------

		if ( (tagRemove != 'FONT') && (tagRemove != 'SIZE') && (tagRemove != 'COLOR') )
		{
			eval("fombj." + tagRemove + ".value = ' " + tagRemove + " '");
			eval(tagRemove + "_open = 0");
		}
	}
}

//--------------------------------------------
// Ensure we got them all
//--------------------------------------------

bbtags = new Array();
fombj.chatbarText.focus();
}


//==========================================
// ALTER FONT
//==========================================

function alterfont(theval, thetag)
{
if (theval == 0)
	return;

if(doInsert("[" + thetag + "=" + theval + "]", "[/" + thetag + "]", true))
	pushstack(bbtags, thetag);

fombj.ffont.selectedIndex  = 0;
fombj.fsize.selectedIndex  = 0;
fombj.fcolor.selectedIndex = 0;   

cstat();

}

function alterfrase(theval, thetag)
{
if (theval == 0)
	return;

if(doInsert("" + thetag + "" + theval + "", true))
	pushstack(bbtags, thetag);

fombj.phr.selectedIndex  = 0;
fombj.stat.selectedIndex  = 0;
//fombj.fcolor.selectedIndex = 0;   

cstat();

}



//==========================================
// SIMPLE TAGS (such as B, I U, etc)
//==========================================

function simpletag(thetag)
{
var tagOpen = eval(thetag + "_open");

if ( get_easy_mode_state() )
{
	inserttext = prompt(prompt_start + "\n[" + thetag + "]xxx[/" + thetag + "]");
	if ( (inserttext != null) && (inserttext != "") )
	{
		doInsert("[" + thetag + "]" + inserttext + "[/" + thetag + "] ", "", false);
	}
}
else
{
	if (tagOpen == 0)
	{
		if(doInsert("[" + thetag + "]", "[/" + thetag + "]", true))
		{
			eval(thetag + "_open = 1");

			//--------------------------------------------
			// Change the button status
			//--------------------------------------------

			eval("fombj." + thetag + ".value += '*'");

			pushstack(bbtags, thetag);
			cstat();
			hstat('click_close');
		}
	}
	else
	{
		//--------------------------------------------
		// Find the last occurance of the opened tag
		//--------------------------------------------
		lastindex = 0;

		for (i = 0; i < bbtags.length; i++ )
		{
			if ( bbtags[i] == thetag )
			{
				lastindex = i;
			}
		}

		//--------------------------------------------
		// Close all tags opened up to that tag was opened
		//--------------------------------------------

		while (bbtags[lastindex])
		{
			tagRemove = popstack(bbtags);
			doInsert("[/" + tagRemove + "]", "", false)

		}

		cstat();
	}
}
}


//==========================================
// Image tag
//==========================================

function tag_image()
{
var FoundErrors = '';
var enterURL   = prompt(text_enter_image, "http://");

if (!enterURL) {
	FoundErrors += " " + error_no_url;
}

if (FoundErrors) {
	alert(jsfile_error_lang + FoundErrors);
	return;
}

doInsert("[IMG="+enterURL+"]", "", false);
}

//--------------------------------------------
// GENERAL INSERT FUNCTION
//--------------------------------------------
// ibTag: opening tag
// ibClsTag: closing tag, used if we have selected text
// isSingle: true if we do not close the tag right now
// return value: true if the tag needs to be closed later

//

function doInsert(ibTag, ibClsTag, isSingle)
{
var isClose = false;
var obj_ta = fombj.chatbarText;

//----------------------------------------
// It's IE!
//----------------------------------------
if ( (ua_vers >= 4) && is_ie && is_win)
{
	if (obj_ta.isTextEdit)
	{
		obj_ta.focus();
		var sel = document.selection;
		var rng = sel.createRange();
		rng.colapse;
		if((sel.type == "Text" || sel.type == "None") && rng != null)
		{
			if(ibClsTag != "" && rng.text.length > 0)
				ibTag += rng.text + ibClsTag;
			else if(isSingle)
				isClose = true;

			rng.text = ibTag;
		}
	}
	else
	{
		if(isSingle)
		{
			isClose = true;
		}

		obj_ta.value += ibTag;
	}
}
//----------------------------------------
// It's MOZZY!
//----------------------------------------

else if ( obj_ta.selectionEnd )
{ 
	var ss = obj_ta.selectionStart;
	var st = obj_ta.scrollTop;
	var es = obj_ta.selectionEnd;

	if (es <= 2)
	{
		es = obj_ta.textLength;
	}

	var start  = (obj_ta.value).substring(0, ss);
	var middle = (obj_ta.value).substring(ss, es);
	var end	= (obj_ta.value).substring(es, obj_ta.textLength);

	//-----------------------------------
	// text range?
	//-----------------------------------

	if (obj_ta.selectionEnd - obj_ta.selectionStart > 0)
	{
		middle = ibTag + middle + ibClsTag;
	}
	else
	{
		middle = ibTag + middle;

		if (isSingle)
		{
			isClose = true;
		}
	}

	obj_ta.value = start + middle + end;

	var cpos = ss + (middle.length);

	obj_ta.selectionStart = cpos;
	obj_ta.selectionEnd   = cpos;
	obj_ta.scrollTop	  = st;


}
//----------------------------------------
// It's CRAPPY!
//----------------------------------------
else
{
	if (isSingle)
	{
		isClose = true;
	}

	obj_ta.value += ibTag;
}

obj_ta.focus();

return isClose;
}

 

 

В файле modules/mod_elfchat.php находим

 
$html .= "<a href='#' onclick={$out}java script:addin({$in} ".stripslashes($r['typed'])." {$in});{$out}><img src=\"style_emoticons/<#EMO_DIR#>/".stripslashes($r['image'])."\"></a><br>";

 

и заменяем на

$html .= "<a href='#' onclick={$out}java script:addin({$in} ".stripslashes($r['typed'])." {$in});{$out}><img src=\"style_emoticons/<#EMO_DIR#>/".stripslashes($r['image'])."\"></a>";

 

 

Есть одна проблема - в IE, после нажатия на ВВ-код, вылетает ошибка в строке состояния. Проблема в файле ipb_cbbcode.js Я его тупо переделал из ipb_bbcode.js Кто знает Java разберитесь, плиз, у меня с ней совсем туго

Ссылка на комментарий
Поделиться на других сайтах

Над этим я как-то не думал. Зачем в два ряда, если в отдельном окне все открываются? Выводи в чат штук 20 первых смайлов через LIMIT (выше описано) и всё
Ссылка на комментарий
Поделиться на других сайтах

Theron: у меня на форуме стоит мод для кликабельных смайлов, поэтому их очень много будет на 1 ряд - растянет браузер.
Ссылка на комментарий
Поделиться на других сайтах

Прошу прощения

В файле modules/mod_elfchat.php находим

 
$html .= "<a href='#' onclick={$out}java script:addin({$in} ".stripslashes($r['typed'])." {$in});{$out}><img src=\"style_emoticons/<#EMO_DIR#>/".stripslashes($r['image'])."\"></a><br>";

 

и заменяем на

$html .= "<a href='#' onclick={$out}java script:addin({$in} ".stripslashes($r['typed'])." {$in});{$out}><img src=\"style_emoticons/<#EMO_DIR#>/".stripslashes($r['image'])."\"></a>";

Ссылка на комментарий
Поделиться на других сайтах

xWanderer, версия для 2.2.x уже есть. :D С небольшими исправлениями

это радует ;)

а где ее взять то можно? что-то я в архиве файлов не нашел..... то что там есть, то все старое.

Хороший вопрос :)

Поддерживаю :)

Ссылка на комментарий
Поделиться на других сайтах

После установки чата - обновите кеш настроек в админке - проблемы с переменными исчезнут.

Для Форумов 2.2 в install_data/install_map.dbi заменить:

ipb.lang на $this->ipsclass->lang

и

ipb.script_url на $this->ipsclass->base_url

 

Чат понравился, дёшево и сердито. :D

Ссылка на комментарий
Поделиться на других сайтах

Theron, при нажатии на "Закрыть все теги", попадаю на несузествующую страницу. И при нажатии на "Расширеный режим" или на "Нормальный режим" показывает ошибку "Script Error" и ничего не делает!!!
Ссылка на комментарий
Поделиться на других сайтах

при нажатии на "Закрыть все теги", попадаю на несузествующую страницу.

Какой адрес показывает при наведении на ссылку?

 

И при нажатии на "Расширеный режим" или на "Нормальный режим" показывает ошибку "Script Error" и ничего не делает!!!

Делает. Отметь "Расширеный режим", и нажми на на любой таг. Выскочит окно сценария

Ссылка на комментарий
Поделиться на других сайтах

Какой адрес показывает при наведении на ссылку?

www.мой сайт/java%20script:closeall();

 

Theron, извини, еще смайлики не работают... но наверное это я где-то при установке ошибся.

Ссылка на комментарий
Поделиться на других сайтах

Какой адрес показывает при наведении на ссылку?

www.мой сайт/java%20script:closeall();

 

Theron, извини, еще смайлики не работают... но наверное это я где-то при установке ошибся.

 

Форум вероятно исковеркал код, замените

java script на javascript

Ссылка на комментарий
Поделиться на других сайтах

А вообще ты молодец что эту доработку сделал!!!

 

Да, щас все ок! Тока вот проблема со смайлами осталась. Надо будет рыться и скать че где не так...

Ссылка на комментарий
Поделиться на других сайтах

Для Форумов 2.2 в install_data/install_map.dbi заменить:

ipb.lang на $this->ipsclass->lang

и

ipb.script_url на $this->ipsclass->base_url

 

заменил, на 2.2.1 заработало :D

правда я ipb.script_url заменил на $this->ipsclass->js_base_url.

 

теперь попробую апгрейдить сайт до 2.2.2.

Ссылка на комментарий
Поделиться на других сайтах


×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.