Получите помощь, поддержку и профессиональное общение в Клубе CodeIgniter

# CodeIgniter User Guide Version 2.1.0

Search User Guide

# Класс Корзины (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);`

## Отображение корзины

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

Обратите внимание, что этот пример использует помощник форм.

<?php echo form_open('path/to/controller/update/function'); ?> <table cellpadding="6" cellspacing="1" style="width:100%" border="0"> <tr> <th>QTY</th> <th>Item Description</th> <th style="text-align:right">Item Price</th> <th style="text-align:right">Sub-Total</th> </tr> <?php $i = 1; ?> <?php foreach ($this->cart->contents() as $items): ?> <?php echo form_hidden($i.'[rowid]', $items['rowid']); ?> <tr> <td><?php echo form_input(array('name' => $i.'[qty]', 'value' => $items['qty'], 'maxlength' => '3', 'size' => '5')); ?></td> <td> <?php echo $items['name']; ?> <?php if ($this->cart->has_options($items['rowid']) == TRUE): ?> <p> <?php foreach ($this->cart->product_options($items['rowid']) as $option_name => $option_value): ?> <strong><?php echo $option_name; ?>:</strong> <?php echo $option_value; ?><br /> <?php endforeach; ?> </p> <?php endif; ?> </td> <td style="text-align:right"><?php echo $this->cart->format_number($items['price']); ?></td> <td style="text-align:right">$<?php echo $this->cart->format_number($items['subtotal']); ?></td> </tr> <?php $i++; ?> <?php endforeach; ?> <tr> <td colspan="2"> </td> <td class="right"><strong>Total</strong></td> <td class="right">$<?php echo $this->cart->format_number($this->cart->total()); ?></td> </tr> </table> <p><?php echo form_submit('', 'Update your Cart'); ?></p>

## Обновление корзины

Чтобы обновить информацию в вашей корзине, вы должны передать массив, содержащий `Row ID` (идентификатор строки) и количество функции $this->cart->update():

Примечание: Если установить количество в ноль, элемент будет удален из корзины.

`$data = array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 3
);
$this->cart->update($data);
// Or a multi-dimensional array
$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();

Позволяет вам удалить корзиину. Эта функция может быть вызвана, к примеру, когда покупатель оформил заказ.

### Поделиться

Переведено в компании Аринт.

# Спасибо!

Вы тоже можете оказать помощь проекту! Как это сделать?

## Помощь и поддержка

Вы можете задать вопросы и получить ответы и советы от гуру CodeIgniter и веб-разработки: вступайте в Клуб CodeIgniter