Source for file Basket.class.php
Documentation is available at Basket.class.php
* @copyright ColoCall 2006
//require_once('core/framework/DBWorker.class.php');
//require_once('core/modules/shop/components/Discounts.class.php');
//require_once('core/modules/shop/components/CurrencyConverter.class.php');
* Корзина с выбранными продуктами
* @var Basket единый для всей системы экземпляр класса Basket
private static $instance;
* Имя таблицы содержащей данные корзины
* Идентификатор пользовательского сеанса
//$this->discounts = Discounts::getInstance();
if(isset ($_POST['basket'])){
$basketData = $_POST['basket'];
if(isset ($basketData['add']) && is_array($basketData['add'])){
foreach($basketData['add'] as $productID => $productCount){
$this->put((int) $productID, (int) $productCount);
elseif(isset ($basketData['delete']) && is_array($basketData['deleteItems'])) {
foreach ($basketData['deleteItems'] as $productID) {
elseif(isset ($basketData['update']) && is_array($basketData['update'])){
foreach($basketData['update'] as $productID => $productCount){
$this->update((int) $productID, (int) $productCount);
* Возвращает единый для всей системы экземпляр класса UserSession.
if (!isset (self::$instance)) {
self::$instance = new Basket;
* Добавление товара в корзину
* @param int идентификатор продукта
* @param int количество позиций
public function put($productID, $productCount = 1) {
$this->dbh->modifyRequest(
'INSERT INTO '. $this->getTableName(). ' (product_id, session_id, basket_count) VALUES (%s, %s, %s) '.
'ON DUPLICATE KEY UPDATE basket_count=basket_count+1',
* Изменяет количество позиций продукта
* @param int идентификатор продукта
* @param int количество позиций
public function update($productID, $productCount) {
$this->dbh->modify(QAL::UPDATE , $this->getTableName(), array('basket_count' => $productCount), array('session_id'=> $this->id, 'product_id'=> $productID));
$this->dbh->modify(QAL::DELETE, $this->getTableName(), null, array('product_id' => $productID));
* Удаляет товар из корзины
* @param int идентификатор продукта
public function takeOut($productID) {
$this->dbh->modify(QAL::DELETE, $this->getTableName(), null, array('session_id'=> $this->id, 'basket_id'=> $productID));
* Возвращает суммарную стоимость товаров в корзине с учетом скидки.
public function getTotal($withDiscount = false) {
foreach ($contents as $row) {
$summ += $this->discounts->calculateCost($row['product_summ']);
//inspect($row['product_summ']);
$summ += $row['product_summ'];
$HRNID = $converter->getCurrent();
return $converter->format($converter->convert($summ, $HRNID, $contents[0]['curr_id']), $HRNID);
* Возвращает содержимое корзины
$result = $this->dbh->selectRequest(
//'SELECT main.*, pt.product_name, ext.product_price, ext.product_price*main.basket_count as product_summ, ext.product_price * (1 - dscnt.dscnt_percent / 100) AS product_summ_with_discount, ext.curr_id, product.product_segment, product.product_code '.
'SELECT main.*, pt.product_name, ext.product_price, ext.product_price*main.basket_count as product_summ, ext.curr_id, product.product_segment, product.product_code '.
'LEFT JOIN shop_products product ON product.product_id = main.product_id '.
'LEFT JOIN shop_products_translation pt ON pt.product_id = main.product_id '.
'LEFT JOIN shop_product_external_properties ext ON ext.product_code = product.product_code '.
//'LEFT JOIN shop_discounts dscnt ON dscnt.group_id = '.$this->discounts->getDefaultGroup().' '.
'WHERE pt.lang_id = %s AND session_id = %s',
return ($contents)? array_map(array($this, 'prepare'), $contents): false;
$HRNID = $converter->getCurrent();
$row['product_price'] = $converter->format($converter->convert($row['product_price'], $HRNID, $row['curr_id']),$HRNID);
$row['product_summ'] = $converter->format($converter->convert($row['product_summ'], $HRNID, $row['curr_id']),$HRNID);
|