Корзина для сайта

Корзина для интернет магазина php

Корзина для интернет магазина php

Здравствуйте уважаемые читатели блога LifeExample, сегодня мы продолжим создавать интернет магазин с помощью PHP и реализуем еще несколько его модулей собственными руками. В прошлой части урока мы реализовали такие компоненты как каталог, карточка товара, и ЧПУ, а также сделали задел для системы наполнения каталога. Сегодня мы будем заниматься разработкой маленькой корзины для интернет магазина.

Пока я не начал описывать рабочий процесс, хочу выразить благодарность первым комментаторам, задающим толковые вопросы, а также тем людям, которые отсылают свои вопросы на мой контактный адрес. Спасибо, за то, что вы есть, и за то, что помогаете мне своими вопросами найти силы не опускать руки, по данному проекту и продолжать его развитие.

Еще хочу заметить, весь код, который я представляю, не претендует на 100% правильность и в ваших силах найти в нем ошибки и оптимизировать, так как вы считаете нужным. Целью данного проекта является не дать вам готовую «болванку» интернет магазина, а научить всех желающих мыслить и самостоятельно разрабатывать PHP программы. Теперь давайте перейдем к процессу разработки нашей системы.

Предлагаю сразу скачать материалы по данному уроку, для наглядности наших дальнейших действий.

Приступим. Какой же интернет магазин без корзины, в которую можно положить товар? Правильно, таких магазинов не существует, поэтому сейчас мы разработаем скрипт для маленькой корзины.

Маленькая корзина для интернет магазина

Под термином маленькая корзина, я понимаю тот интерфейс представления отложенных для покупки товаров, который, как правило, размещается в шапке сайта.

Читайте также:  Обработчик формы

Маленькая корзина для интернет магазина

Маленькая корзина служит своеобразным индикатором для посетителей, по которому пользователь может ориентироваться в количестве отложенных товаров и итоговой сумме заказа.

С первого взгляда, кажется, что нет ничего проще, чем реализовать подобную вещь, с помощью сессии, но существует ряд подводных камней. Например, если поставить задачу: чтобы при возврате пользователя на сайт корзина была наполнена теми же товарами, что и на момент его выхода. В этом случае просто сессией не обойдешься.

Существует несколько способов решения данной задачи:

  1. Хранить содержимое корзины для каждого зарегистрированного пользователя в БД
  2. Хранить содержимое корзины любого пользователя в Cookies браузера

В большинстве случаев второй вариант подходит лучше первого, поэтому мы его и разработаем. Т.е. в итоге у нас корзина должна работать в связке session + cookies

Приступим, отрываем header.php и вставляем в верстку вывод нашей корзины:

Здесь у нас фигурирует вызов содержимого массива $smal_cart , который будет доступен в шаблоне после дальнейших действий.
Для удобного восприятия добавим в style.css стили для корзины:

#header .smalcart {
float : right ;
height : 55px ;
padding : 10px ;
padding-left : 15px ;
margin : 10px ;
border : 1px solid gray ;
border-radius : 10px ;
-moz-border-radius : 10px ;
-webkit-border-radius : 10px ;
background : #E6DEEA ;
}

Можете посмотреть на то, как изменился внешний вид сайта. Теперь давайте углубимся в структуру системы и начнем создавать нужные файлы.

Так как компонент маленькая корзина для интернет магазина не является отдельной страницей, то контроллера для нее мы создавать не будем, внешнее представление у нас уже есть в общем шаблоне, поэтому и отдельного views она тоже иметь не будет, а вот model все-таки придется сделать.

В папке \application\models\ создадим файл cart.php с таким содержанием:

class Application_Models_Cart
{
function addToCart ( $id , $count = 1 )
{
$_SESSION [ ‘cart’ ] [ $id ] = $_SESSION [ ‘cart’ ] [ $id ] + $count ;
return true ;
}

function delFromCart ( $id , $count = 1 ) { }

Данная модель будет обновлять информацию о содержимом корзины. Пока нам достаточно иметь только функцию добавления товаров, но на будущее создадим интерфейсы для функций удаления товаров и отчистки корзины.

Все данные о продуктах из корзины, у нас будут храниться в массиве $_SESSION в виде ассоциативного массива, ключами которого будут ID продуктов, а значением – количество этих продуктов в корзине. Такой минимализм сыграет нам на руку при передаче этой информации в куки.

Теперь у нас есть модель Application_Models_Cart, и логично предположить, что она должна, откуда-то вызываться. Вызываться модель будет из контролера каталога. Почему каталога? Потому, что ссылки ‘В корзину‘ у нас расположены на странице каталога, завязанной на файлах view-controler-model относящихся к компоненту catalog. А еще и потому, что пока переходить на страницу большой корзины мы не будем. При нажатии на данные ссылки, мы должны оставаться на странице каталога, а информация в маленькой корзине должна изменяться.

Кстати о ссылках, ‘В корзину‘ , давайте сразу изменим значение атрибута href в представлении каталога

В результате получим ссылку вида

При клике пользователя на данную ссылку, mvc-система передаст управление в application /controllers/catalog.php. Куда мы сейчас вставим нужный код обработчика данного события:

class Application_Controllers_Catalog extends Lib_BaseController
{
function index ( )
{
if ( $_REQUEST [ ‘in-cart-product-id’ ] )
{
$cart = new Application_Models_Cart ;
$cart -> addToCart ( $_REQUEST [ ‘in-cart-product-id’ ] ) ;
Lib_SmalCart :: getInstance ( ) -> setCartData ( ) ;
header ( ‘Location: /catalog’ ) ;
exit ;
}

$model = new Application_Models_Catalog ;
$Items = $model -> getList ( ) ;
$this -> Items = $Items ;
}
}

Поясню, что тут происходит. Сначала проверяется, был ли щелчок по ссылке и передался ID продукта, который нужно добавить. Если GET параметр in-cart-product-id содержит ID , то управление передается в модель, которая функцией addToCart() , добавляет в корзину нужный продукт, либо только увеличивает его количество. Строка Lib_SmalCart::getInstance()->setCartData() , требует отдельного внимания, поэму я пока ее пропущу, представим, что ее просто нет. На этом этапе у нас есть вся информация о содержимом корзины интернет магазина, и хранится она в сессии. Поэтому мы можем спокойно вернуться на страницу каталога с помощью редиректа:

Так как мы пока не знаем что такое AJAX и без перезагрузки страницы никак не сможем обойтись, мы просто возвращаемся на страницу каталога, для того чтобы увидеть изменения в корзине. (Об основах AJAX можно прочесть тут.)

На этом можно было бы остановиться, если бы не стояла задача сохранения информации при возвращении пользователя после закрытия браузера. Самое время вернуться к пропущенной строчке:

Стоит предупредить, что далее людям, мало разбирающимся в ООП, будет сложно понять код построчно, но в рамках общего смысла не будет ничего сложного. Что же происходит в этой строке:

  1. Lib_SmalCart – интерпретируется нашей системой как создание экземпляра класса SmalCart, расположенного в \lib\smalcart.php
  2. ::— получаем доступ к функциям класса
  3. Вызов любой функции данного класса должен проходить через функцию getInstance(), в задачи которой входит отсеять все возможные повторные попытки создания экземпляра этого класса. Такой метод называется Singleton.
  4. setCartData() – сериализует данные о корзине из сессии, и записывает их в cookie.

Для более четкого представления откройте файл \lib\smalcart.php в нем я постарался подробно описать суть каждой функции, поэтому особо комментировать нечего. Единственное, что нужно сказать это то, что вызов метода getCartData() этого класса, происходит и в файле function.php , который является еще одним отделителем логики от верстки и записывает в переменную $smal_cart всю необходимую для вывода информацию.

Помните первым шагом в этой статье мы в header.php вставили код:

Так вот, теперь вы наверняка понимаете, откуда берется данный массив $smal_cart и можете заметить, что логическая цепочка обмена информации замкнулась.

Стоит заметить, что при отключенных куках, данный механизм функционировать не будет, ровно также как и любой механизм, использующий сессии, так как идентификатор сессии для ее корректной работы хранится и передается все теми же кукмами.

Всем тем, кому требуются более тщательные объяснения, советую писать вопросы в комментариях, либо мне на e-mail.

Сегодня мы добавили немало кода, который требуется обмозговать и переварить, прежде чем преступать к следующим частям магазина. Надеюсь, что у вас не возникнет трудностей с пониманием данной статьи “Корзина для интернет магазина php”. Если вы еще не подписались на e-mail или rss рассылку, не стесняйтесь — подписывайтесь. Скачать листинг данного урока можно по ссылке:

Читайте также похожие статьи:

Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.

Источник

Создаем корзину для сайта

В этом уроке разберем, как можно создать корзину для сайта. Рассмотрим основные моменты. У нас будет страница с товарами, где для каждого товара будет кнопка купить со своим id, при клике на кнопку мы будем делать Ajax-запрос к php скрипту. В этом php файле будем создавать сессию корзины. Ну и напоследок сделаем страницу нашей корзины для сайта, где также при помощи Ajax-запросов можно будет менять количество товаров или удалять товар из корзины.

Вот наша страница с товарами:

         

Товар 1

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Beatae, modi!

Товар 2

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Beatae, modi!

Товар 3

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Beatae, modi!

Теперь напишем скрипт обработки клика на кнопку, в котором мы получим id кнопки, который является кодом нашего товара и отправим его аякс запросом в файлик addtocart.php.

  

Также добавим на нашу страницы ссылку на корзину со счетчиком товаров.

Теперь создадим наш файл addtocart.php, где мы будем получать данные от аякс-запроса, открывать сессию корзины и записывать в нее добавленный товар. Сессия корзины будет у нас в виде массива, где индексами будут id наших товаров, а значения количество товаорв. При добавлении товара будем устанавливать количество 1, которое можно будет менять на странице корзины.

  else > $count = count($temp);//считаем товары в корзине $_SESSION['cart'] = $temp;//записывае в сесию наш масив echo $count; //возвращаем количество товаров ?>

Теперь сделаем страницу корзины cart.php. Мы будем выводить товары в виде таблицы:

У себя по id товара можете вытаскивать из базы информацию о товаре, для отображения названия, картинки, цены…

         

Ваша корзина пуста

id количество Удалить $kol): ?> id товара: ">

Теперь подключим на нашу страницу корзины jqery и напишем скрипт отбработки изменения количества и кнопки удалить. Тут мы также будем делать аякс-запрос к нашим php-обработчикам, где будет меняться сессия корзины.

   

Осталось написать два php обработчика. В cartamount.php мы будем изменять количество товаров в нашей сессии, а в cartdel.php удалять в сессии запись с нужным id . Начнем с cartamount.php

Теперь в нашей сессии изменено количество и если обновим страничку корзины, то количество товаров сохранится. Теперь создадим обработчик удаления товара cartdel.php

 $_SESSION['cart'] = $temp; //сохраняем сессию ?>

Вот и все наша корзина для сайта готова, теперь можно создавать кнопку «оформить заказ» и там уже работать с нашей сессией корзины.

Источник

Оцените статью