Корзина
Корзина предназначена для отбора понравившихся товаров. Хранить данные корзины можно в файлах cookies или в переменных $_SESSION. У нас эта информа ция будет храниться в текстовых файлах f-$_SESSION[session].txt. Функция session_id() возвращает текущий идентификатор сессии (SID). Для хранения файлов отводим папку tmp1. Сохраняться содержимое файлов будет до формирования заказа, т. е. корзина при выходе и входе с сайта не будет обнуляться, и можно ее редактировать несколько дней. Уничтожаться файл будет только при формировании заказа.
Добавление товаров в корзину
При входе в профиль вызывается функция f_korzina_right. Проверяется существование файла f-$_SESSION[session].txt. Если файла не существует, создаем его (пустой), иначе считываем содержимое. Функция f_korzina_right находится в файле prgkorzina/function_ korzina_right.php (листинг 3.41).
Листинг 3.41
<?php
// Изображение корзины
// и кол-во товара в корзине
function f_korzina_right()
{
// подключаемся к базе данных
require_once("mybaza.php");
$text1="";
// проверка существования корзины
$file1="tmp1/f-".$_SESSION[session]."-".$_SESSION[user].".txt";
// если нет создать
if(!file_exists($file1))
{
$fp=fopen($file1,"w");chmod($file1,0777);
$count=0;$kol=0;$summa=0;
}
// если есть, посчитать сумму и кол-во
else
{
$fp=fopen($file1,"r");
$count=0;$summa=0; while($str=fgetcsv($fp,1000,";"))
{
$count++;
$kol+=$str[1];
$summa+=$str[1]*$str[2];
}
}
$text1.="<center><img id=’imgkorzina’ onmouseover=’flag1.over=1;’ onmouseout=’flag1.over=0;’ src=’img/korzina.jpg’><br>";
if($count>0) // корзина непустая
{
$text1.="<br>Товаров ".$count;
$text1.="<br>Кол-во ".$kol;
$text1.="<br>".$summa." rub";
$query1="SELECT usd,eur FROM rate ORDER BY data DESC LIMIT 0, 1 ";
$rez1=mysql_query($query1);
$row1=mysql_fetch_assoc($rez1);
$usd=$row1[usd];$eur=$row1[eur];
$text1.="<br>".sprintf("%8.2f",$summa/$usd)." usd";
$text1.="<br>".sprintf("%8.2f",$summa/$eur)." eur";
$text1.="<br><a href=’javascript:void();’ onclick=’xajax_View_ Korzina();’>Подробно</a>";
}
else // корзина пустая
{
$text1.="<br>Корзина пустая";
}
$text1.="<center>"; return $text1;
?>
Корзина кратко показывает:
количество товаров;
число наименований товаров;
сумму в трех валютах.
Вид корзины иллюстрируют рис. 3.20 и 3.21.
В файл корзины информация о товарах записывается по строкам: ID товара; количество; цена товара.
При нажатии ссылки В корзину или при перетаскивании картинки (или заголовка товара) в корзину происходит вызов xajax-функции Add_To_Korzina (из фай-
ла prgkorzina /add_to_korzina.php, листинг 3.42). В качестве аргумента передается
ID товара. Далее проверяем файл корзины на наличие в нем такого товара. Проверку
осуществляет функция а_add_to_korzina, находящаяся в файле prgkorzina
/function_add_to_korzina.php (листинг 3.43). Если такой товар существует — изме-
няется количество для данного товара в файле корзины. Если такой товар отсутствует в корзине, создается новая строка в файле корзины.
Рис. 3.20. Вид пустой корзины
Рис. 3.21. Вид непустой корзины
Листинг 3.42
<?php
// Добавить товар в корзину
function Add_To_Korzina($Id)
{
$objResponse = new xajaxResponse();
$objResponse->assign("flag_ajax","value",’yes’);
// добавить товар в корзину
$content=f_add_to_korzina($Id);
if($content==’no’)
{
// получить контент для корзины
$content1=f_korzina_right();
// запустить javascript – если корзина подробно видна
// изменить ее содержимое
$script2="if(document.forms.Flags.flag_korzina.value==’yes’)";
$script2.="{xajax_View_Korzina();}";
$objResponse->script($script2);
$objResponse->assign("right2","innerHTML",$content1);
// перенести видимость на блок корзины
$objResponse->script("document.getElementById (‘right2′).scrollIntoView();");
} else
$objResponse->alert("Такой товар уже есть в корзине !!!");
$objResponse->assign("flag_ajax","value",’no’); return $objResponse;
}
?>
Листинг 3.43
<?php
function f_add_to_korzina($Id)
{
$text1="no";
// подключаемся к базе данных
require_once("mybaza.php");
// открываем файл корзины
$file1="tmp1/f-".$_SESSION[session]."-".$_SESSION[user].".txt";
$fp=fopen($file1,"r");
$tofile=”;$kol=1;
// считываем данные
while($str=fgetcsv($fp,1000,";"))
{
$tofile1=implode($str,";")."\r\n";
// есть такой товар
if($str[0]==$Id)
{
$text1=’yes’;
$kol=$str[1]+1;
}
// нет такого товара
// запоминаем в новый контент строки
226
else
$tofile.=$tofile1; Часть II. Проект интернет-магазина
}
//if($text1==’no’)
//{
$query1="SELECT pay_rub,new_pay_rub FROM tovars WHERE id=".$Id." ";
$query2="SELECT discount FROM users WHERE id=’".$_SESSION[user]."’ ";
$discount=mysql_result(mysql_query($query2),0); if(mysql_result(mysql_query($query1),0,"new_pay_rub")>0)
$pay_rub=mysql_result(mysql_query($query1),0,"new_pay_rub"); else
$pay_rub=mysql_result(mysql_query($query1),0,"pay_rub");
// цена сразу считается по скидке
$pay_rub=trim(sprintf("%10.2f",$pay_rub*(100-$discount)/100));
// добавляем в новый контент строки
$tofile.=$Id.";".$kol.";".$pay_rub."\r\n";
//} fclose($fp);
// запись новых данных в файл корзины
$fp=fopen($file1,"w"); fwrite($fp,$tofile); fclose($fp);
return $text1;
}
?>
ЗАМЕЧАНИЕ
Задокументированные строки в листинге 3.43 — это вариант, когда при помещении такого же товара к корзину, он не добавляется, а просто выводится сообщение Такой товар уже есть в корзине (рис. 3.22).
Рис. 3.22. Вид корзины
Источник: Петин В. А., Сайт на AJAX под ключ. Готовое решение для интернет-магазина. — СПб.: БХВ-Петербург, 2011. — 432 с.: ил. + CD-ROM — (Профессиональное программирование)