Класс Shopping Cart (Корзина)
Класс позволяет добавлять элементы в сессию в то время, пока пользователь остается на сайте. Эти элементы могут извлекаться и отображаться в формате стандартной корзины, позволяющей пользователю изменять количество или удалять элементы.
Пожалуйста, обратите внимание что класс Shopping Cart обеспечивает лишь базовую функциональность корзины. Он не поддерживает функции доставки, авторизации кредитной карты и другие.
Инициализация класса
Важно: Класс Shopping Cart использует Класс Session CodeIgniter для того, чтобы сохранять информацию корзины в базе данных, поэтому перед использованием необходимо создать соответствующую таблицу, как описано в Документации Session , и установить настройки сессии в вашем application/config/config.php файле.
Для того, чтобы инициализировать класс Shopping Cart в вашем контроллере, используйте функцию $this->load->library:
$this->load->library('cart');
Загруженный класс Shopping Cart доступен через: $this->cart
Примечание: класс Shopping Cart автоматически загружает и инициализирует класс 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. Они используются внутри класса, поэтому, пожалуйста, не используйте эти слова в качестве имен индексов при добавлении данных в корзину.
Ваш массив должен содержать дополнительные данные. Все, что вы включаете в массив, будет сохранено в сессии. Однако, лучше стандартизировать все ваши данные о продуктах в заказе, для того, чтобы облегчить отображение информации.
Добавление множества элементов в корзину
Используя объемный массив, как показано ниже, вы можете добавлять множество продуктов в корзину одним действием. Это полезно в случаях, когда вы хотите позволить людям выбирать из нескольких различных элементов на одной странице.
$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);
Отображение корзины
Для отображения корзины создайте Отображение с кодом, соответствующим примеру ниже.
Примеры используют помощник Form.
Обновление корзины
Для обновления информации в вашей корзине, вы должны передать массив, содержащий 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", основанного на 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 (boolean), если конкретная строка в корзине содержит опции. Эта функция предназначена для использования в цикле вместе с $this->cart->contents(), так как вы должны передать rowid этой функции, как показано в примере выше- Отображение корзины.
$this->cart->product_options(rowid);
Возвращает массив опций конкретного продукта. Эта функция разработана, чтобы использоваться в цикле с $this->cart->contents(), которому необходимо передавать rowid, как показано в примере выше- Отображение корзины.
$this->cart->destroy();
Позволяет вам удалить корзину. Эта функция может быть вызвана при завершении обработки заказа покупателя.