Корзина

Опубликовал: Среда, Ноябрь 21, 2012 в категории AJAX, PHP | Пока нет комментариев

Корзина предназначена для отбора понравившихся товаров. Хранить данные корзины можно в файлах 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 — (Профессиональное программирование)

Add to Social Bookmarks
  • del.ici.ous
  • Digg
  • Furl
  • Google
  • Simpy
  • Spurl
  • Y! MyWeb
  • BobrDobr
  • Mr. Wong
  • Yandex.Bookmarks
  • Text 2.0
  • News2
  • AddScoop
  • RuSpace
  • RUmarkz
  • Memori
  • Google Bookmarks
  • Pisali
  • SMI 2
  • Moe Mesto
  • 100 Zakladok
  • Vaau!
  • Technorati
  • RuCity
  • LinkStore
  • NewsLand
  • Lopas
  • Закладки - I.UA
  • Connotea
  • Bibsonomy
  • Trucking Bookmarks
  • Communizm
  • UCA

Похожие посты:

Комментировать

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>