Класс Cart (Корзина) (РАЗДЕЛ ДОКУМЕНТАЦИИ НАХОДИТСЯ В РАЗРАБОТКЕ)
Класс Cart позволяет добавлять элементы к сессии, которая остается активной пока пользователь находится на вашем сайте. Эти элементы могут быть использованы и выведены в стандартном формате "корзины для покупок", позволяющей пользователю изменять количество или удалять товары из корзины.
Пожалуйста заметьте, что класс Cart обеспечивает ТОЛЬКО основной функционал "корзины". Он не реализует такие функции как доставка, авторизация кредитной карты или другие состовляющие обработки заказа.
Инициализация класса
Важно: Класс Cart использует класс Session для сохранения состояния корзины в базу данных, поэтому перед использованием класса Cart вы должны создать в бд таблицу, как показано в документации к классу Session, и установить параметры сессий в файле appliction/config/config.php.
Для инициализации класса Cart, в конструкторе вашего контроллера используйте функцию $this->load->library:
$this->load->library('cart');
Однажды загруженный, объект Cart будет доступен с использованием: $this->cart
Замечание: Класс Cart загружает и инициализирует класс Session автоматически, так что если только вы не используете сессии где-то еще в вашем приложении, вам не требуется загружать класс Session самим.
Добавление элемента в Корзину
Для добавление элемента в корзину, просто передайте массив с информацией о товаре в функцию $this->cart->insert() как показано ниже:
`$data = array( 'id' => 'sku_123ABC', 'qty' => 1, 'price' => 39.95, 'name' => 'Футболка', 'options' => array('Size' => 'L', 'Color' => 'Red') );
$this->cart->insert($data);`
Важно: Первые четыре индекса массива (id, qty, price и name) являются обязательными. Если вы опустите любой из них данные не будут сохранены в корзину. Пятый индекс (options) является необязательным. Он предназначен для использования в тех случаях, когда товар имеет собственные параметры. Используйте массив для сохранения параметров в options как показано выше.
Пять зарезервированных индексов:
- id - Каждый товар в вашем магазине должен иметь уникальный идентификатор. Обычно это "sku"(Stock Keeping Unit — идентификатор товарной позиции, прим. пер.) или любой другой.
- qty - Количество купленного товара.
- price - Цена товара.
- name - Название товара.
- options - Любые дополнительные параметры, которые нужны для идентификации товара. В этот индекс должен быть помещен массив.
В дополнение к этим пяти индексам есть два зарезервированных слова: rowid и subtotal. Они используются внутри классом Cart, поэтому пожалуйста НЕ используйте эти слова как индексы массива, когда добавляете элементы в корзину.
Ваш массив может содержать дополнительную информацию. Все что вы включите в ваш массив будет сохранено в сессии. Тем не менее, лучше стандартизировать данные о всех ваших товарах, для того что бы сделать проще отображение информации в таблице.
Добавление множества элементов в Корзину
Возможно добавление множества товаров в корзину за одно действие с использованием многомерного массива, как показано ниже. Это может быть полезно когда вы хотите дать пользователям возможность выбирать несколько товаров на одной странице.
`$data = array( array( 'id' => 'sku_123ABC', 'qty' => 1, 'price' => 39.95, 'name' => 'Футболка', 'options' => array('Size' => 'L', 'Color' => 'Red') ), array( 'id' => 'sku_567ZYX', 'qty' => 1, 'price' => 9.95, 'name' => 'Кофейная кружка' ), array( 'id' => 'sku_965QRS', 'qty' => 1, 'price' => 29.95, 'name' => 'Стеклянный бокал' ) );
$this->cart->insert($data);`
Отображение содержимого Корзины
Для отображения содержимого корзины вы должны создать файл отображения с кодом, схожим с показанным ниже.
Пожалуйста заметьте, что этот пример использует Хелпер Form
`<?php echo form_open('path/to/controller/update/function'); ?>
<table cellpadding="6" cellspacing="1" style="width:100%" border="0">
<tr> <th>Кол-во</th> <th>Описание товара</th> <th style="text-align:right">Цена</th> <th style="text-align:right">Итого</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>Сумма</strong></td> <td class="right">$<?php echo $this->cart->format_number($this->cart->total()); ?></td> </tr>
</table>
<p><?php echo form_submit('', 'Обновить вашу Корзину'); ?></p>`
Обновление данных в Корзине
Для обновления данных в вашей корзине вы должны передать массив, содержащий Row ID и количество (qty, прим. пер.) в функцию $this->cart->update():
Заметьте: Если количество установлено в 0, элемент будет удален из корзины.
`$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 это уникальный идентификатор, который генерируется в момент добавления элемента в корзину. Причина, по которой создается уникальный идентификатор в том, что в корзину могут быть помещены одинаковые товары, но с разными параметрами.
Например, кто-то решил купить две одинаковые футболки(одинаковый product ID), но разных размеров. Product ID (и другие атрибуты) будут идентичны для обеих размеров потому-что это одна и та же футболка. Единственным различием будет размер. Поэтому корзина должна видеть эту разницу для того, что-бы одинаковые товары с разными параметрами обрабатывались по отдельности. Это реализуется с помощью уникального параметра "row ID", базирующегося на параметре Product ID и всеми другими параметрами, связанными с товаром.
Почти всегда обновление данных в корзине совершается через страницу "Показать корзину"...
Справка по функциям
$this->cart->insert();
Позволяет вам добавлять элементы в корзину как показано выше.
$this->cart->update();
Позволяет обновлять данные элементов в корзине.
$this->cart->total();
Возвращает общее количество товаров в корзине (с учетом параметра "qty" каждого товара, прим. пер.).
$this->cart->total_items();
Возвращает количество элементов в корзине.
$this->cart->contents();
Возвращает массив, содержащий все элементы корзины.
$this->cart->has_options(rowid);
Возвращает TRUE (boolean) если отдельный элемент корзины имеет параметры (options). Эта функция разработана для использования в цикле с $this->cart->contents(). В качестве параметра вы должны передавать rowid, как показано выше в примере Отображение содержимого Корзины.
$this->cart->options(rowid);
Возвращает массив параметров отдельного товара. Эта функция разработана для использования в цикле с $this->cart->contents(). В качестве параметра вы должны передавать rowid, как показано выше в примере Отображение содержимого Корзины.
$this->cart->destroy();
Позволяет вам стереть содержимое корзины. Эта функция, вероятно, должна быть вызвана, когда вы закончили обработку заказа клиента.
