Всем привет. Довольно редко пишу сюда, но всётаки решил прибегнуть к этому. Довольно не плохо владею пхп и всё было бы не плохо, если бы требования к моим работам только им и ограничивались. В силу чего начал практиковаться в AJAX.
Для начала расскажу чего я пытался добится. Мне нужно было сделать кнопочку, которая бы при нажатии на неё записывала данные и после добавления данных выводила блок с количеством записей. Девайс этот очень похож на длешное "Избранное". Поэтому я и решил посмотреть его код и взять от туда идею для реализации своей этой фишечки. Написал я Jquery функцию, сделал php сценарий для обработки переданных данных. Казалось бы что почти всё готово, осталось только добавить ещё одну функцию квери для вывода блока и вызвать её в конце функции добавления данных. php коды для обоих функций получились довольно маленькими и я решил делать их в одном файле. Так как регистрации у меня на сайте нет, а данные хранить где-то нужно, я создал массив в пользовательской сессии и работать уже с ней. Возможности очистики этого массива я вывел в другом разделе, где собственно эти данные используются в явном виде. Квери функции выглядят так:
<script type="text/javascript">
function comparsion_block () {
$("#cmr_block").html('');
$.post(dle_root + "engine/ajax/comparsion.php", function(data){
$("#cmr_block").html(data);
});
};
function comparsion( cmr_id, event ) {
ShowLoading('');
$.post(dle_root + "engine/ajax/comparsion.php", { cmr_id: cmr_id, action: event}, function(data){
HideLoading('');
$("#cmr-id-" + cmr_id).html(data);
});
comparsion_block ();
return false;
};
</script>
Файл comparsion.php представляет собой вот что:
<?php
@session_start();
@error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );
@ini_set ( 'display_errors', true );
@ini_set ( 'html_errors', false );
@ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE );
define( 'DATALIFEENGINE', true );
define( 'ROOT_DIR', substr( dirname( __FILE__ ), 0, -12 ) );
define( 'ENGINE_DIR', ROOT_DIR . '/engine' );
include ENGINE_DIR . '/data/config.php';
if( $config['http_home_url'] == "" ) {
$config['http_home_url'] = explode( "engine/ajax/comparsion.php", $_SERVER['PHP_SELF'] );
$config['http_home_url'] = reset( $config['http_home_url'] );
$config['http_home_url'] = "http://" . $_SERVER['HTTP_HOST'] . $config['http_home_url'];
}
require_once ENGINE_DIR . '/modules/functions.php';
$config['charset'] = ($lang['charset'] != '') ? $lang['charset'] : $config['charset'];
$id = intval( $_REQUEST['cmr_id'] );
if( $_REQUEST['action'] == "plus" ) {
$count = count($_SESSION['comparison']) + 1;
if (!in_array($id, $_SESSION['comparison'])) $_SESSION['comparison'][] = $id;
$buffer = "<img src="" . $config['http_home_url'] . "templates/{$config['skin']}/dleimages/minus_fav.gif" onclick="comparsion('" . $id . "', 'minus'); return false;" title="" . $lang['news_minfav'] . "" style="vertical-align: middle;border: none;" />";
} elseif( $_REQUEST['action'] == "minus" ) {
unset($_SESSION['comparison'][$id]); $count = count($_SESSION['comparison']) - 1;
$buffer = "<img src="" . $config['http_home_url'] . "templates/{$config['skin']}/dleimages/plus_fav.gif" onclick="comparsion('" . $id . "', 'plus'); return false;" title="" . $lang['news_addfav'] . "" style="vertical-align: middle;border: none;" />";
} else {
$buffer = "<div id="cmr_block"><div style="width:200px; height:100px; top:200px; left:0; position:fixed; float:left;z-index:10;">
<div align="left">Автомобилей для сравнения: <a href="{$config['http_home_url']}index.php?do=comparison">".$count."</a>";
$buffer .= "</div></div></div>";
}
@header( "Content-type: text/css; charset=" . $config['charset'] );
echo $buffer;
?>
За реализацию прошу не пинать, это моя первая проба пера. Надеюсь на помощь
Источник:
dle-faq.pro, DLE