На главную Статьи Функции

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




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

  1. Набор PHP функций для работы с самой корзиной: добавить, удалить, обновить количество и т.д.
  2. Набор JavaScript функций, которые будут отвечать за кнопки добавить, удалить и иземнить (я при слове JavaScript обычно пугаюсь, но здесь не будет ничего сложного)
  3. backend-файлы, которые будут отвечать за работу корзины товаров без перезагрузки страницы
  4. Если еще нет – таблица в базе данных, содержащая в себе товары магазина.
  5. Библиотека jQuery. Буду пользоваться ей (может когда-нибудь опишу, как тоже самое сделать с помощью JsHttpRequest), поскольку он проще и нагляднее для работы с технологией AJAX
  6. Для нагладности я сделал файлы примеры, можно скачать здесь

Первым этапом будет разработка PHP функций для работы корзины. Итак:

  1. Добавить товар в корзину. В нее передается идентификатор товара. Я изменю структуру самого массива, содержащего в сессии добавленные в корзину товары, теперь будет следующим образом:

    $_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();
      }
      
    Функция для добавления товара в корзину готова.

  2. Функция 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'];
    	  }
    	}
  3. Функция, которая будет изменять количество товара в корзине:
    /**
      * принимает те же параметры, что и функция add_to_cart()
      */
      function update_product_count($product_id, $count) {
    	  $_SESSION['products'][$product_id]['count']=$count;
    	  //вызываем update_cart() чтобы пересчитать стоимость.
    	  update_cart();
      }
  4. Ну и последнее что нам нужно – удалить товар из корзины:
    	function remove_from_cart($product_id) {
    		unset($_SESSION['products'][$product_id]);
    		update_cart();
    	}
    	

Вот и все, функции для работы с корзиной готовы, осталось вывести на странице список товаров, и сделать кнопки «Добавить в корзину». Лучше всего представленные функции поместить в один файл, например cart.php, и подключать его инструкцией include. Стоит оговориться, что дополнительную переменную $count в функции add_to_cart() я ввел на тот случай, если вы хотите чтобы пользователь определял количество товара при нажатии на кнопку добавить в корзину, а не в интерфейсе корзины. Дальше я не буду передавать значения этой переменной, а буду использовать значение по умолчанию, которое равно 1. В следующей статье мы будем создавать основное – JavaScript функции для работы с корзиной.



© 2010-2019 При использовании материалов ссылка на сайт www.webchaynik.ru обязательна

обратная связь