Codeigniter обновить корзину, если продукт существует - PullRequest
0 голосов
/ 17 июня 2011

Как обновить количество товара, если товар уже существует в корзине?

Вот моя функция добавления в корзину:

public function add() {
        $product= $this->products_model->listProduct($this->input->post('id_product'));

        $data = array(
            'id' => $this->input->post('id_product'),
            'qty' => $this->input->post('qty'),
            'price' => $product->price,
            'name' => $product->title           );

        $this->cart->insert($data);
        redirect('product/'.$product->id.'/'.url_title($product->title, 'dash', TRUE));
    }

С помощью этой функции, если товар существует вкорзина, скажем, с количеством 8, если я добавлю тот же продукт с количеством 1, это будет 1, а не 9.

Заранее спасибо.

Ответы [ 5 ]

1 голос
/ 11 апреля 2012

@ AFRC Вы можете попробовать

 public function add() {
        $flag = TRUE;
        $dataTmp = $this->cart->contents();

        foreach ($dataTmp as $item) {
            if ($item['id'] == 'sku_123ABC') {
                echo "Found Id so updatig quantity";
                $qtyn = $item['qty'] + 1;
                $this->update($item['rowid'], $qtyn);
                $flag = FALSE;
                break;
            }
        }
        if ($flag) {
            $data = array(
                'id' => 'sku_123ABC',
                'qty' => 1,
                'price' => 39.95,
                'name' => 'T-Shirt',
            );
            $this->cart->insert($data);
            echo "Inserting as not found in the cart";
        }
        echo "Add1 called";
    }
0 голосов
/ 27 января 2014

Я использовал ответ AFRC для создания кода ниже, это может быть полезно. Спасибо за ваш ответ, это действительно помогло мне! Вы можете вызвать функцию корзины ниже, если в вашей корзине произойдет совпадение с идентификатором, в противном случае вставка будет. Он также отображает представление корзины независимо от вставки, обновления или просто отображения. Обратите внимание, что у меня есть отдельная функция get_specific_craft, которая используется для получения данных об элементах пули (таких как цена и название).

public function cart($slug = "")
{
    if($slug != "")
    {
        $craft = $this->crafts_model->get_specific_craft($slug);

        $flag = TRUE;

        foreach ($this->cart->contents() as $item)
        {

            if ($item['id'] == $slug) 
            {
                $qtyn = $item['qty'] + 1;

                $dat = array(
                   'rowid' => $item['rowid'],
                   'qty'   => $qtyn
                );


                $this->cart->update($dat);
                $flag = FALSE;
                break;
            }
        }

        if ($flag) 
        {
            $crt = array(
               'id'      => $craft['id'],
               'qty'     => 1,
               'price'   => $craft['price'],
               'name'    => $craft['name']
               //'options' => array('Size' => 'L', 'Color' => 'Red')
            );
            $this->cart->insert($crt);

        }       
    }
    $this->load->view('cart' , $this->data);

}
0 голосов
/ 28 июня 2013

используйте этот код для добавления в корзину

 if (count($this->cart->contents())>0){
                    foreach ($this->cart->contents() as $item){
                        if ($item['id']==$product->id){
                            $data = array('rowid'=>$item['rowid'],'qty'=>++$item['qty']);
                            $this->cart->update($data);
                        }else{
                            $data = array('id'=>$product->id,'qty'=>1,'price'=>$product->price,'name'=>$product->id,'options'=>array('image'=>$product->thumb,'product_name'=>$product->title));
                            $this->cart->insert($data);
                        }
                    }
0 голосов
/ 02 марта 2013

Просто проверьте это, если у вас есть варианты

$rowid == md5($items['id'].implode('', $items['options']));

если нет

$rowid == md5($items['id']);
0 голосов
/ 17 июня 2011

Я не вижу, где определяется $produto, не должно ли это быть, вместо этого $product->price и $product->title соответственно?

Согласно документам :

Внимание! Требуются первые четыре индекса массива (id, qty, price и name).Если вы пропустите какой-либо из них, данные не будут сохранены в корзину.

Обязательно проверьте, установлены ли они правильно (возможно, ищите орфографические ошибки, например, я стреляю в темноте,«qtd» вместо «qty» или что-то в этом роде).Более того, если вы хотите обновить уже существующий продукт, вам нужно использовать $this->cart->update() вместо $ this->cart->insert()

...