Уважаемые посетители сайта, задающие вопросы вроде "А как прикрутить вашу корзину к сайту?" и т.п. Я не делаю готовых решений, я описываю логику реализации, для каждого отдельного сайта нужно будет дописывать те или иные вещи в любом случае, поэтому если вам очень нужно что-либо прикрутить или приделать, я оказываю платные и бесплатные услуги по консультированию и доработке сайтов. Пишите в форму обратной связи вверху страницы, отвечу всем.
Интернет-магазин. AJAX корзина товаров. Часть 1: PHP функции.
Не так давно решил немного обновить свою серию статей о том, как создать корзину для интернет магазина. В общем, там есть некоторые недоработки, неточности и места, которые я хотел бы изменить, но основной момент – сделать так, чтобы кнопка «Добавить в корзину» работала без перезагрузки страницы. Зачем? Нет предела совершенству… на мой взгляд – это удобно. Сначала надо понять, что нам понадобится для создания корзины интернет-магазина на 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(); } Функция для добавления товара в корзину готова.
Вот и все, функции для работы с корзиной готовы, осталось вывести на странице список товаров, и сделать кнопки «Добавить в корзину». Лучше всего представленные функции поместить в один файл, например cart.php, и подключать его инструкцией include. Стоит оговориться, что дополнительную переменную $count в функции add_to_cart() я ввел на тот случай, если вы хотите чтобы пользователь определял количество товара при нажатии на кнопку добавить в корзину, а не в интерфейсе корзины. Дальше я не буду передавать значения этой переменной, а буду использовать значение по умолчанию, которое равно 1. В следующей статье мы будем создавать основное – JavaScript функции для работы с корзиной.
Здравствуйте. Прошу помощи в создании очень простой корзины товаров. Есть вывод товаров с базы данных, как сделать корзину товаров. Допустим к товарам добавить кнопку "В корзину" при нажатии которой будет добавляться товар в корзину. Сохранение корзины в бд не нужно. Нужна корзина через куки или сессию. Сам сайт: http://host1649597.hostland.pro/category/muzhskaya-parfyumeriya/ Нужна максимально простая, главное что-бы работала)
14 ответов
Para bellum
Самое простое:
class Cart { /** * Данные корзины * * @var array */ protected $data = ; /** * Имя cookie с корзиной * * @var string */ protected $name = "cart"; public function __construct() { $this->decode(); } /** * Добавление ID товара * * @param integer $id * @return void */ public function set($id) { if (!in_array($id, $this->data)) { $this->data = (int) $id; } } /** * Получение массива ID товаров * * @return array */ public function get() { return $this->data; } /** * Удаление товара из корзины * * @param integer $id * @return void */ public function delete($id) { if (false !== $key = array_search($id, $this->data)) { unset($this->data[$key]); } } /** * Получение корзины из cookie * * @return void */ protected function decode() { $data = $_COOKIE[$this->name] ?? ""; if ($data = json_decode($data, true)) { $this->data = array_filter($data, "is_int"); } } /** * Сохранение корзины в cookie * * @return void */ public function save() { setcookie($this->name, json_encode($this->
Использование:
# Добавление ID товара в корзину $cart = new Cart; $cart->set(1); $cart->save(); # Удаление ID товара из корзины $cart = new Cart; $cart->delete(1); $cart->save(); # Получение ID товаров из корзины $cart = new Cart; $ids = $cart->get();
Пара уточнений: 1) Если есть инструменты для работы с запросом и ответом (Request и Response), то напрямую к $_COOKIE лучше не обращаться и setcookie не вызывать, а использовать те инструменты.2) Будет работать только в PHP 7. Для более ранних версий напишите 66 так:
$data = isset($_COOKIE[$this->name]) ? $_COOKIE[$this->name] : "";
М_Сергей
Писать коды не буду, но принцип должен быть следующий. Кнопка "Добавить в корзину" должна быть либо кнопкой формы либо картинкой ссылки, в зависимости от того каким методом будут передаваться данные на сервер POST или GET. В этих данных должны быть ID товара и допустим его кол-во, т.е. два значения. На сервере скрипт обрабатывает эти два значения и помещает в суперглобальный массив SESSION. А уж из него Вы черпаете информацию о добавленных товарах в самой корзине. На основе имеющихся данных в массиве SESSION можно стилизовать кнопку "Корзина" (подсветить там ее и написать сколько товаров в ней лежит...)
Ну вот код кнопки
echo "
". $row["name"]." | ". $row["code"]." | ". $row["price"]." | ". $row["brand"]." | ". $row["description"]." | Add |
";
а именно
Add
Para bellum
Что-то сложно не могу понять Код, что я привёл, сохраните в отдельный файл, затем подключайте его там, где нужно использовать корзину. Как использовать, я сказал после подписи "Использование:". Ничего сложного.добавление в корзину тут то я и бессилен А для кого я готовый код корзины написал? Например, сохранили тот код в файле "Cart.php". Затем, в add_to_trash.php (лучше в add_to_cart.php) пишем:Корзина .korzina { margin-left: 200px; background: black; width: 200px; height: 200px; color: white; overflow: scroll; } SAMSUNG(250$) NOKIA(150$) APPLE(300$) MOTOROLA(400$) TESLA(500$)
вот вам мой вариант))) у Para bellum правильнее! - мой просто для теста))
посмотрите какая у вас версия php в новой -можно создавать массив $a = ; а старой $a = array();Para bellum
посмотрите какая у вас версия php У него, наверное, 5.3 ещё. Parse error: syntax error, unexpected "[" in cart.php on line 9 Если нужно, чтобы работало в старинных версиях, вот:Bluetooth