Интернет-магазин. AJAX корзина товаров. Часть 2: JavaScript функции.
Не так давно решил немного обновить свою серию статей о том, как создать корзину для интернет магазина. В общем, там есть некоторые недоработки, неточности и места, которые я хотел бы изменить, но основной момент – сделать так, чтобы кнопка «Добавить в корзину» работала без перезагрузки страницы. Зачем? Нет предела совершенству… на мой взгляд – это удобно. Сначала надо понять, что нам понадобится для создания корзины интернет-магазина на AJAX:
Первым этапом будет разработка PHP функций для работы корзины. Итак:
$_SESSION['products'] – массив, который отвечает за товары в корзине, структура которого будет такой:
$_SESSION['products']=array( 'идентификатор_товара_1'=>array('cost'=>'цена_товара_1', 'count'=>'количество_товара_1_в_корзине'), 'идентификатор_товара_2'=>array('cost'=>'цена_товара_1', 'count'=>'количество_товара_2_в_корзине'), // и т.д )За количество товаров в корзине будет отвечать переменная $_SESSION['products_incart'], за стоимость корзины – переменная $_SESSION['cart_cost']. С такой организацией массива товаров в корзине проще работать, а именно удалять, изменять и считать количество товаров. Итак, пишем саму функцию:
/** * параметры: * $product_id – идентификатор товара * $count – количество добавляемого товара, по умолчанию 1, */ function add_to_cart($product_id, $count=1)) { //проверяем, не был ли добавлен товар в корзину ранее: if (!empty($_SESSION['products'][$product_id]) { //увеличиваем количество на единицу, если товар уже добавлен: $_SESSION['products'][$product_id]['count']++; } else { //создаем пустой массив, на всякий случай, можно и без него. $_SESSION['products'][$product_id]=array(); //извлекаем цену товара из базы данных: $q=”SELECT price FROM таблица_товаров WHERE id='$product_id'”; //разбиваем результат запроса в массив: $add_product=mysql_fetch_assoc(mysql_query($q)); //добавляем товар в корзину: $_SESSION['products'][$product_id]['cost']=$add_product['price']; $_SESSION['products'][$product_id]['count']=$count; } /* вызываем функции для подсчета стоимости корзины и количества товаров. здесь я опять внесу изменение, будем считать не количество товаров в корзине, а количество самих товаров, т.е. если в корзине 5 единиц товара 1, и 2 – товара 2, то товаров в корзине – 2, а не 7. И еще один момент, лучше всего объединить в одну функцию подсчет суммы корзины и количества товаров в ней: update_cart() */ update_cart(); }Функция для добавления товара в корзину готова.
function update_cart() { //количество товаров в корзине считаем как количество элементов в массиве //$_SESSION['products'] с помощью стандартной функции PHP count(): $_SESSION['products_incart']=count($_SESSION['products']); //сначала обнулим стоимость: $_SESSION['cart_cost']=0; //стоимость корзины (перемножаем цены на количество и складываем): foreach ($_SESSION['products'] as $key=>$value) { $_SESSION['cart_cost']+=$_SESSION['products'][$key]['cost']* $_SESSION['products'][$key]['count']; } }
/** * принимает те же параметры, что и функция add_to_cart() */ function update_product_count($product_id, $count) { $_SESSION['products'][$product_id]['count']=$count; //вызываем update_cart() чтобы пересчитать стоимость. update_cart(); }
function remove_from_cart($product_id) { unset($_SESSION['products'][$product_id]); update_cart(); }
Вот и все, функции для работы с корзиной готовы, осталось вывести на странице список товаров, и сделать кнопки «Добавить в корзину». Лучше всего представленные функции поместить в один файл, например cart.php, и подключать его инструкцией include. Стоит оговориться, что дополнительную переменную $count в функции add_to_cart() я ввел на тот случай, если вы хотите чтобы пользователь определял количество товара при нажатии на кнопку добавить в корзину, а не в интерфейсе корзины. Дальше я не буду передавать значения этой переменной, а буду использовать значение по умолчанию, которое равно 1. В следующей статье мы будем создавать основное – JavaScript функции для работы с корзиной.
© 2010-2025 При использовании материалов ссылка на сайт www.webchaynik.ru обязательна