Реализация корзины на php. Корзина для интернет-магазина на фронте или Пишем модульный javascript. Полный код работы с данными

Уважаемые посетители сайта, задающие вопросы вроде "А как прикрутить вашу корзину к сайту?" и т.п. Я не делаю готовых решений, я описываю логику реализации, для каждого отдельного сайта нужно будет дописывать те или иные вещи в любом случае, поэтому если вам очень нужно что-либо прикрутить или приделать, я оказываю платные и бесплатные услуги по консультированию и доработке сайтов. Пишите в форму обратной связи вверху страницы, отвечу всем.


Интернет-магазин. AJAX корзина товаров. Часть 1: PHP функции.

Не так давно решил немного обновить свою серию статей о том, как создать корзину для интернет магазина. В общем, там есть некоторые недоработки, неточности и места, которые я хотел бы изменить, но основной момент – сделать так, чтобы кнопка «Добавить в корзину» работала без перезагрузки страницы. Зачем? Нет предела совершенству… на мой взгляд – это удобно. Сначала надо понять, что нам понадобится для создания корзины интернет-магазина на AJAX:

  • Набор PHP функций для работы с самой корзиной: добавить, удалить, обновить количество и т.д.
  • Набор JavaScript функций, которые будут отвечать за кнопки добавить, удалить и иземнить (я при слове JavaScript обычно пугаюсь, но здесь не будет ничего сложного)
  • backend-файлы, которые будут отвечать за работу корзины товаров без перезагрузки страницы
  • Если еще нет – таблица в базе данных, содержащая в себе товары магазина.
  • Библиотека jQuery . Буду пользоваться ей (может когда-нибудь опишу, как тоже самое сделать с помощью JsHttpRequest), поскольку он проще и нагляднее для работы с технологией 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(); } Функция для добавления товара в корзину готова.

  • Функция 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 функции для работы с корзиной.

    Здравствуйте. Прошу помощи в создании очень простой корзины товаров. Есть вывод товаров с базы данных, как сделать корзину товаров. Допустим к товарам добавить кнопку "В корзину" при нажатии которой будет добавляться товар в корзину. Сохранение корзины в бд не нужно. Нужна корзина через куки или сессию. Сам сайт: 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 "

    NameCodePriceBranddescription
    ". $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