Чтение RSS каналов

Форум

Открыть Ответить

Меняем систему AJAX

3.5

3.5
1
27.02.2010 23:59:5028.02.2010 00:05:20
В принципе, в своей сборке Open SLAED SE я давно уже поменял структуру системы ajax, но на днях столкнулся еще с одной проблемой - класс SACK, который используется в Slaed полный отстой:
1 для каждого запроса GET или POST необходимо создавать отдельные функции и перечислить в них все переменные;
2 класс не воспринимает свойство формы "multipart/form-data"!
в общем с помощью имеющегося SACK я так и не смог организовать загрузку файлов на сервер.

Для своих целей я нашел кроссбраузерный класс ajax с поддержкой закачки файлов JsHttpRequest. Теперь при помощи этого класса я окончательно переделал всю систему систему ajax в своей сборке Slaed CMS.

Здесь я опишу лишь принцип изменений системы, чтобы каждый заинтересованный веб-мастер смог это сделать не зависимо от версии используемой CMS. Постараюсь сделать это подробно...

Этап первый. Подключаем новый скрипт.
Скачиваем архив JsHttpRequest и распаковываем во временный каталог. Копируем каталог /lib в каталог /ajax своего сайта. Открываем основной файл функций, для Open SLAED это function/function.php и находим фукнцию head(). В этой функции ищем строку:
$strhead .= "<script language=\"JavaScript\" type=\"text/javascript\" src=\"ajax/global_func.js\"></script>\n";
и перед ней вставляем еще одну
$strhead .= "<script type=\"text/javascript\" src=\"ajax/lib/JsHttpRequest/JsHttpRequest.js\"></script>\n";
$strhead .= "<script language=\"JavaScript\" type=\"text/javascript\" src=\"ajax/global_func.js\"></script>\n";

Сохраняем файлы. Новые жабаскрипты теперь будут подгружаться на всех страницах сайта.

Второй этап. Подключаем новые функции PHP и меняем структуру системы ajax.
Открываем файл /ajax.php в корневом каталоге сайта, ищем...

Нет! Настолько все запущено, не могу удержаться от сарказма, извините... Придется переписать весь файл! Смайл - 04

В комментариях приведенного ниже содержимого /ajax.php определенно и четко видно новую структуру для системы ajax:
<?php
define("MODULE_FILE", 1);
/* Подгружаем основной файл функций. */
include('function/function.php');

/* Подключаем языковые файлы и функции шаблонов оформления. */
get_lang();
$ThemeSel = get_theme();
if(file_exists('templates/'.$ThemeSel.'/index.php')) include('templates/'.$ThemeSel.'/index.php');
else include('function/template.php');
include('function/no-cache.php');

/* Подгружаем класс новой системы ajax для обработки передаваемых переменных. Не забудьте указать свою кодировку! */
include('ajax/lib/JsHttpRequest/JsHttpRequest.php');
$JsHttpRequest =& new JsHttpRequest("UTF-8");

/* Из обязательных переменных нам понадобятся лишь две! */
$op = text_filter($_REQUEST['op']);
$mod = text_filter($_REQUEST['mod']);


if(file_exists('modules/'.$mod.'/ajax.php')){
/* Подгружаем файл ajax.php из каталога модуля, если таковой существует.
Все далнейшее управление происходит через модуль. */
	include('modules/'.$mod.'/ajax.php'); 
	exit();
}else{
/* В противном случае обрабатываем переменную $op и вызываем одну из стандартных функций системы. */
	switch($op){
		/* Эти функции только для Open SLAED SE :) */
		case 'captcha':
		$name = gen_pass(4);
		echo '<img src="/?captcha='.$name.'" alt="'._SECURITYCODE.'" onmouseover="Tip(\''._SECURITYCODE.'\');" />';
		break;
		case 'lpoints':
		if(is_user()){
			$userinfo = getusrinfo();
			$postid = intval($userinfo['user_id']);
			update_points(9, $postid);
		}
		break;
		/* ----------------------------------- */
		
		case 'show_files':
		show_files();
		break;
		case 'user_sainfo':
		user_sainfo();
		break;
		case 'user_sinfo':
		$id = intval($_GET['id']);
		user_sinfo($id);
		break;
		case 'get_user':
		get_user();
		break;
		default:
		rating();
		break;
	}
}
?>

Думаю вы поняли, что эти изменения позволят подгружать свои функции для ajax в самописных модулях.

Теперь необходимо открыть файл /ajax/global_func.js и добавить в него две новые функции:
// Ajax functions POST & GET
function doPost(frm, blk){
var req = new JsHttpRequest();
obj_frm = document.getElementById(frm);
obj_blk = document.getElementById(blk);
req.loader = 'FORM';
req.onreadystatechange = function(){
if(req.readyState == 4){
obj_blk.innerHTML = req.responseText;
}
}
req.open(null, 'ajax.php', true);
req.send( { q: obj_frm } );
}

function doGet(url, blk){
url = url.replace(/:/g,'&')
var req = new JsHttpRequest();
obj_blk = document.getElementById(blk);
req.onreadystatechange = function(){
if(req.readyState == 4){
obj_blk.innerHTML = req.responseText;
}
}
req.open('GET', url, true);
req.send(null);
}

Наконец переходим к самому скучному последнему этапу...

Этап три. Обновление функций и отладка системы.
Теперь необходимо запастись терпением и обновить все старые вызовы ajax. Искать старые вызовы вам придется самостоятельно, ибо как я уже сказал, это не подробная инструкция по сбору конструктора. Для поиска по всем файлам в каталогах рекомендую воспользоваться Macromedia Dreamweaver.

Пример для передачи данных методом POST. Простейший модуль, файл modules/test_modul/index.php:
<?php
if(!defined("MODULE_FILE")){
	header('Location: .././index.php');
	exit;
}
function main(){
	global $conf;
	head();
	open();
	echo '<div id="adiv"></div><form id="aform" method="post"><div>'
	.'Your title:&nbsp;<input type="text" name="title_text" /><br />'
	.'Your e-mail:&nbsp;<input type="text" name="email_text" />'
	.'<input type="hidden" name="mod" value="'.$conf['name'].'" />'
	.'<input type="hidden" name="op" value="show_data" />'
	.'<input type="button" onclick="doPost(\'aform\', \'adiv\');" />'
	.'</div></form>';
	close();
	foot();
}
switch($op){
	default:
	main();
	break;
}

файл modules/test_modul/ajax.php:
<?php
if(!defined("MODULE_FILE")){
	header('Location: .././index.php');
	exit;
}
function show_data(){
	$title = text_filter($_POST['title_text'];
	$email = text_filter($_POST['email_text'];
	echo 'Title = '.$title.'<br />E-Mail = '.$email;
}
switch($op){
	case 'show_data':
	show_data();
	break;
}
?>

Как видите, теперь система передает содержимое всех полей формы, сколько бы их ни было, включая тип "file". Для передачи данных через форму методом GET так же можно использовать функцию doPost() лишь указав method="GET".

Функция doGet нужна в тех местах, где нельзя использовать формы ввода. Все просто:
<img src="images/all/refresh.gif" style="cursor: pointer;" onclick="doGet('ajax.php?op=user_sinfo:id=2', 'sinfo2');" alt="Обновить" />

Обратите внимание, что вместо символа "&" в запросе используется ":"! Это фиксит валидность кода.

На этом вроде все... Надеюсь, информация станет полезной.

PS
http://pdator.ru/contact-rights.html Всем удачи! Смайл - 02
3.69

3.69
2
28.02.2010 22:07:0928.02.2010 22:08:08
Ура ........

наконец то и тебя осенило ......

уже наверно года два как назад в своей системе все поменял на JsHttpRequest и в модулях использую только JsHttpRequest

с намного проще и удобнее работать !!!!
4.05

4.05
3
02.03.2010 18:14:15
ZOMBiE, кроме на с тобой, это видимо никого особо не интересует)))
3.69

3.69
4
02.03.2010 18:39:45
я давно все переделал под jquery
Мне нравится именно она
3.61

3.61
5
02.03.2010 18:44:09
Интересует, господа, очень! Спасибо большое!!!
3.96

3.96
6
03.03.2010 11:51:55
скоро выложу как пример модуль опросов для OpenSLAED
• голосования на AJAX
• чекбокс (несколько вариантов ответов)


Версия системы: Open SLAED 1.*
Версия PHP: PHP 5
Сервер: Сервер в интернете
4.05

4.05
7
03.03.2010 17:34:23
вот как вариант использования jQuery на слаеде
http://vitalik.jino.ru/index.php?name=tour
3.61

3.61
8
03.03.2010 18:07:42
vitalik1972, у вас не slaed а *** везде, отпечатка выше.
4

4
9
03.03.2010 18:20:47
это пример реализации. не более того.
пожелание заказчика модуля. с этим не поспоришь :)
3.61

3.61
10
04.03.2010 14:36:31
Алексей, а не расскажешь как AJAX к Lite прикрутить? И нужно ли оно?
3.92

3.92
Открыть Ответить
Хотите опробовать SLAED CMS в действии?

Технологии

PHP MySQL HTML 5 CSS 3 jQuery jQuery UI

Контакты

  • D-49179, Deutschland
    Ostercappeln, Im Siek 6
  • +49 176 61966679

  • https://slaed.net
Идеи и предложения
Обратная связь