Класс корзины
Класс корзины позволяет добавлять товары к сессии, которая остается активной пока пользователь просматривает веб-сайт. Эти товары могут быть извлечены и отображены в стандартном формате “класса корзины”, позволяя пользователю обновить количество или удалить товары из корзины.
Важно
Класс корзины считается УСТАРЕВШИМ и не должен использоваться. В настоящее время сохранен только для обратной совместимости.
Обратите внимание, что класс корзины обеспечивает ТОЛЬКО базовую функциональность “корзины”. Она не включает доставку, авторизацию кредитной карты или другие компоненты обработки.
Использование класса корзины
Инициализация класса корзины
Важно
Класс корзины использует класс сессий CodeIgniter чтобы сохранить информациу корзины в базе данных, поэтому перед использованием класса корзины вы должны создать таблицы базы данных, как указано в документации сессии и установить настройки сессии в application/config/config.php файле чтобы использовать базу данных.
Для инициализации класса корзины в конструкторе контроллера используйте $this->load->library() метод:
$this->load->library('cart');
После загрузки объект корзины будет доступен через:
$this->cart
Примечание
Класс корзины загрузит и инициализирует класс сессий автоматически, так что если вы используете сессии в другом месте вашего приложения, нет необходимости загружать класс сессий.
Добавление товара в корзину
Для добавление товара в корзину просто передайте массив с информацией о продукте $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 - Каждый товар в вашем магазине должен иметь уникальный идентификатор. Как правило, это будет “sku” или другой идентификатор.
- qty - Количество приобретаемого товара.
- price - Цена товара.
- name - Название товара.
- options - Любые дополнительные атрибуты, необходимые для идентификации продукта. Данные должны передаваться через массив.
В дополнение к пяти индексам описаным выше есть два зарезервированных слова: rowid и subtotal. Они используются внутри класса корзины, поэтому, пожалуйста НЕ используйте эти слова в качестве имен индексов при вставке данных в корзину.
Ваш массив может содержать дополнительные данные. Все что вы включите в массив будет храниться в сессии. Однако лучше всего стандартизировать данные среди всех продуктов, чтобы сделать отображение информации в таблице легче.
$data = array(
'id' => 'sku_123ABC',
'qty' => 1,
'price' => 39.95,
'name' => 'T-Shirt',
'coupon' => 'XMAS-50OFF'
);
$this->cart->insert($data);
Метод 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/method'); ?>
<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>
Обновление корзины
Чтобы обновить информацию в корзине, вы должны передавать массив содержащий 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);
Вы также можете обновить любое свойство, которое была определено ранее при вставке элемента, такие как настройки, цена или другие настраиваемые поля.
$data = array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 1,
'price' => 49.95,
'coupon' => NULL
);
$this->cart->update($data);
Что такое ID строки?
ID строки является уникальным идентификатором, который генерируется корзиной, при добавлении товара в корзину. Уникальный ID создается для одинаковых товаров с разными опциями, которыми можно управлять через корзину покупок.
Например, предположим кто-то покупает две одинаковые футболки (одинаковый ID товара), но разных размеров. ID продукта (и другие атрибуты) одинаковы для обоих размеров, потому что это одинаковые футболки. Единственным различием будет размер. Класс корзина имеет средства выявления этой разницы, так что эти два размера футболок можно назначить независимо. Она делает это путем создания уникального “ID строки” на основе ID товара и любых опций связанных с ним.
Почти во всех случаях обновление корзины происходит из-за действий пользователя на странице “просмотра корзины”, поэтому разработчику никогда не нужно беспокоиться об “ID строки”, сначала убедившись, что ваша страница “просмотра корзины” содержит информацию в скрытом поле формы и убедившись что он передается в update() метод, когда форма обновления подтверждена. Пожалуйста, изучите конструкцию страницы “просмотра корзины” для получения дополнительной информации.
Настройки класса
- class CI_Cart
- $product_id_rules = '.a-z0-9_-'
Это правило регулярного выражения мы используем для проверки ID продукта - буквенно-цифровой, тире, знаки подчеркивания и точки по умолчанию
- $product_name_rules = 'w -.:'
Это правило регулярного выражения мы используем для проверки ID продукта и название продукта - буквенно-цифровой, тире, символы подчеркивания, двоеточия или точки по умолчанию
- $product_name_safe = TRUE
Следует ли разрешить только безопасные имена товаров. По умолчанию TRUE.
- insert([$items = array()])
Параметры: - $items (массив) – Товары для добавления в корзину
Возвращает: TRUE при удаче, FALSE если нет
Возвращаемый тип: Булево
Вставляет товары в корзину и сохраняет их в таблицу сессий. Возвращает TRUE при удаче и FALSE если нет.
- update([$items = array()])
Параметры: - $items (массив) – Товары для обновления в корзине
Возвращает: TRUE при удаче, FALSE если нет
Возвращаемый тип: Булево
Этот метод позволяет изменять свойства данного элемента. Обычно она вызывается со страницы “просмотра корзины” если пользователь вносит изменения в количестве до подтверждения. Этот массив должен содержать идентификатор rowid для каждого элемента.
- remove($rowid)
Параметры: - $rowid (число) – ID товара для удаления из корзины
Возвращает: TRUE при удаче, FALSE если нет
Возвращаемый тип: Булево
Позволяет удалить товар из корзины, передав ей $rowid.
- total_items()
Возвращает: Общая сумма товаров в корзине Возвращаемый тип: число Отображается общее количество товаров в корзине.
- contents([$newest_first = FALSE])
Параметры: - $newest_first (булево) – Стоит ли установить новейшие элементы массива
Возвращает: Массив содержимого корзины
Возвращаемый тип: Массив
Возвращает массив, содержащий всё в корзине. Вы можете сортировать порядок по которому будет возвращен массив, передавая его TRUE где содержимое будет отсортировано от новых к старым, в противном случае сортируется от старых к новым.
- get_item($row_id)
Параметры: - $row_id (число) – ID строки для извлечения
Возвращает: Массив данных элемента
Возвращаемый тип: Массив
Возвращает массив, содержащий данные для элемента, соответствующие заданным ID строки или FALSE если такого элемента не существует.
- has_options($row_id = '')
Параметры: - $row_id (число) – ID проверяемой строки
Возвращает: TRUE если существует, FALSE если нет
Возвращаемый тип: Булево
Возвращает TRUE (булево) если конкретная строка в корзине является нужной. Этот метод разработан для использования в цикле с contents(), поскольку вы должны передать rowid в этот метод как показано в примере отображения корзины.
- product_options([$row_id = ''])
Параметры: - $row_id (число) – ID строки
Возвращает: Массив опций продукта
Возвращаемый тип: Массив
Возвращает массив опций конкретного продукта. Этот метод разработан для использования в цикле с contents(), поскольку вы должны передать rowid в этот метод как показано в примере отображения корзины.