Класс Корзины (Shopping Cart)
Класс корзины позволяет добавлять элементы в сессию, которая остается активной, пока пользователь посещает ваш сайт. Элементы могут быть получены и отображены в стандартном формате "корзины", позволяя пользователям изменять количество и удалять элементы из корзины.
Пожалуйста обратите внимание, что класс Cart предоставляет только базовую функциональность. Он не поддерживает доставку, авторизацию кредитных карт и другие компоненты процессинга.
Инициализация класса
Важно: Класс Cart использует класс Session для сохранения информации корзины в БД, поэтому перед использованием класса Cart вы должны создать таблицу в БД, как описано в документации класса Session, и установить настройки сессий в вашем файле application/config/config.php, чтобы использовать базу данных.
Чтобы инициализировать класс Cart в конструкторе контроллера, используйте функцию $this->load->library:
$this->load->library('cart');
Загруженный объект класса доступен к использованию через: $this->cart
Примечание: Класс Cart будет загружать и инициализировать класс Session автоматически, поэтому вне зависимости от того, используете ли вы класс Session где-нибудь еще в вашем приложении, здесь вам не нужно загружать его вручную.
Добавление элемента в корзину
Чтобы добавить элемент в корзину, просто передайте массив с информацией о продукте в функцию $this->cart->insert(), как показано ниже:
$data = array(
'id' => 'sku_123ABC',
'qty' => 1,
'price' => 39.95,
'name' => 'T-Shirt',
'options' => array('Size' => 'L', 'Color' => 'Red')
);
$this->cart->insert($data);
Важно: Первые четыре индекса массива (id, qty, price и name) являются обязательными. Если вы опустили любой из них, данные не будут сохранены в корзине. Пятный индекс (options) опциональный. Он предназначен для использования в случаях, если ваш продукт имеет какие-то опции. Используйте массив для опций, как показано выше.
Пять зарезервированных индексов:
- id - Каждый продукт в вашем магазине должен иметь уникальный идентификатор. Обычно это артикул или другой идентификатор.
- qty - Количество приобретаемого товара.
- price - Цена элемента.
- name - Название элемента.
- options - Любые дополнительные атрибуты, которые нужны для идентификации продукта. Они должны быть переданы через массив.
Вдобавок к этим пяти индексам есть еще два зарезервированных слова: rowid и subtotal. Они используются внутри класса Cart, поэтому не используйте эти слова в качестве имен индексов при добавлении данных в корзину.
Ваш массив может содержать дополнительные данные. Все, что вы добавите в ваш массив, будет сохранено в сессии. Однако, лучше стандартизировать ваши данные для всех ваших продуктов в заказе, чтобы сделать отображение информации в таблице более простым.
Метод insert() возвращает $rowid (идентификатор строки) если вы успешно вставили один элемент.
Добавление множества элементов
Используя многомерный массив, как показано ниже, возможно добавлять множество продуктов в корзину одним действием. Это полезно в случаях, где вы хотите разрешить пользователям выбирать из различных элементов на одной странице.
$data = array(
array(
'id' => 'sku_123ABC',
'qty' => 1,
'price' => 39.95,
'name' => 'T-Shirt',
'options' => array('Size' => 'L', 'Color' => 'Red')
),
array(
'id' => 'sku_567ZYX',
'qty' => 1,
'price' => 9.95,
'name' => 'Coffee Mug'
),
array(
'id' => 'sku_965QRS',
'qty' => 1,
'price' => 29.95,
'name' => 'Shot Glass'
)
);
$this->cart->insert($data);
Отображение корзины
Чтобы отобразить корзину создайте файл отображения с кодом, соответствующим показанному ниже.
Обратите внимание, что этот пример использует помощник форм.
Обновление корзины
Чтобы обновить информацию в вашей корзине, вы должны передать массив, содержащий Row ID (идентификатор строки) и количество функции $this->cart->update():
Примечание: Если установить количество в ноль, элемент будет удален из корзины.
$data = array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 3
);
$this->cart->update($data);
// Или многомерный массив
$data = array(
array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 3
),
array(
'rowid' => 'xw82g9q3r495893iajdh473990rikw23',
'qty' => 4
),
array(
'rowid' => 'fh4kdkkkaoe30njgoe92rkdkkobec333',
'qty' => 2
)
);
$this->cart->update($data);
Что такое Row ID (идентификатор строк)? Row ID это уникальный идентификатор, который генерируется кодом корзины при добавлении элемента. Смысл использования уникального идентификатора в том, что это позволяет корзине работать с идентичными продуктами, но с различными опциями.
Например, давайте предположим, что кто-то покупает две одинаковые майки (один и тот-же идентификатор продукта), но с разными размерами. Идентификатор продукта (и другие атрибуты) будут одинаковыми для обоих размеров, так как это одна и та-же майка. Различие только в размере. Корзина должна учитывать это различие, идентифицировать их как разные позиции, чтобы позволить независимое управление элементами заказа. Это возможно благодаря уникальному "row ID" (идентификатору строки), основанному на идентификаторе продукта и других опциях, ассоциированных с ним.
В большинстве случаев обновление корзины будет происходить, когда пользователь будет что-то делать на странице корзины, поэтому маловероятно, что разработчику когда-то придется делать что-то с "Row ID", поэтому просто позаботьтесь о том, чтобы скрытое поле присутствовало на странице, и данные из него передавались в контроллер. Пожалуйста рассмотрите конструкцию отображения корзины для более подробной информации.
Справка по функциям
$this->cart->insert();
Позволяет вам добавить элементы в корзину, как объяснено выше.
$this->cart->update();
Позволяет вам обновить элементы в корзине, как показано выше.
$this->cart->total();
Возвращает полную стоимость корзины.
$this->cart->total_items();
Возвращает суммарное количество элементов в корзине.
$this->cart->contents();
Возвращает массив с содержимым корзины.
$this->cart->has_options(rowid);
Возвращает TRUE, если указанная строка есть в корзине. Эта функция разработана, чтобы использоваться в цикле с $this->cart->contents(), поэтому вы должны передать rowid этой функции, как показано выше, в примере отображения корзины.
$this->cart->product_options(rowid);
Возвращает массив опций для конкретного продукта. Эта функция разработана, чтобы использоваться в цикле с $this->cart->contents(), поэтому вы должны передать rowid этой функции, как показано выше, в примере отображения корзины.
$this->cart->destroy();
Позволяет вам удалить корзиину. Эта функция может быть вызвана, к примеру, когда покупатель оформил заказ.