Корзина: добавление дополнительных товаров в корзину - PullRequest
0 голосов
/ 28 ноября 2011

Как добавить несколько товаров в корзину?

Это HTML-форма,

<form action="cart.php?action=add" method="post" id="form-cart">
    <input type="text" name="cart[unique_id]" value="<?php echo $product->unique_id;?>" size="3" maxlength="3" />
    <input type="text" name="cart[quantity_stock]" value="<?php echo $product->in_stock;?>" size="3" maxlength="3" />
    <input type="submit" value="Add to cart" />
</form>

Это метод add_item в классе cart,

 public function add_item($info)
{

    # Check if the content array does not exist yet.
    if (isset($this->content[0]['unique_id'])) 
    {
        $i = 0;
        $this->content[$i]['unique_id'] = $this->content[$i]['unique_id'];
        $this->content[$i]['quantity_request']++;
        $this->content[$i]['quantity_stock'] = $this->content[$i]['quantity_stock'];
        $this->content[$i]['time_created'] = time();
        $i += $i;

        # Check if the quantity request exceeds quanity in stock.
        if($this->content[$i]['quantity_request'] > $this->content[$i]['quantity_stock'])
        {
            # If it does, then set the quantity request to quanity in stock.
            $this->content[$i] = array(
                'unique_id' => $this->content[$i]['unique_id'], 
                'quantity_request' => $this->content[$i]['quantity_stock'], 
                'quantity_stock' => $this->content[$i]['quantity_stock'],
                'time_created' => time(),
                'error' => 'The quantity you requested on this item is exceeding the quantity in our stock.'
            );
        }
    } 
    else 
    {
        //$this->content[$unique_id] = array('quantity_request' => 1, 'quantity_stock' => $this->content[$unique_id]['quantity_stock'],'time_created' => time());

        # Create the content array, $unique_id as the key.
        # If it does, then set the quantity request to quanity in stock.
        $this->content[0] = array(
            'unique_id' => $info['unique_id'],
            'quantity_request' => 1,
            'quantity_stock' => $info['quantity_stock'],
            'time_created' => time()
        );
    }

}

Итак, после того, как у меня уже есть элемент в классе,

array
  0 => 
    array
      'unique_id' => string '1386638969582999' (length=16)
      'quantity_request' => int 1
      'quantity_stock' => string '10' (length=2)
      'time_created' => int 1322429496

Массив должен был увеличить другой элемент, когда я отправляю другой элемент, подобный этому,

html,

<form action="cart.php?action=add" method="post" id="form-cart">
    <input type="text" name="cart[<?php echo $product->unique_id;?>][quantity_stock]" value="<?php echo $product->in_stock;?>" size="3" maxlength="3" />
    <input type="submit" value="Add to cart" />
</form>

php,

array
  0 => 
    array
      'unique_id' => string '1386638969582999' (length=16)
      'quantity_request' => int 1
      'quantity_stock' => string '11' (length=2)
      'time_created' => int 1322429496

  1 => 
    array
      'unique_id' => string '1386638969582900' (length=16)
      'quantity_request' => int 1
      'quantity_stock' => string '10' (length=2)
      'time_created' => int 1322429400

Но я всегда получаю один предмет только с возрастающим запрошенным количеством,

array
      0 => 
        array
          'unique_id' => string '1386638969582999' (length=16)
          'quantity_request' => int 2
          'quantity_stock' => string '10' (length=2)
          'time_created' => int 1322429496

Обратите внимание, что сейчасстало 2 в 'quantity_request' => int 2

Значение quantity_request должно увеличиваться только при повторном нажатии на тот же unique_id.

Как сделать это правильно?

РЕДАКТИРОВАТЬ:

HTML,

<form action="cart.php?action=add" method="post" id="form-cart">
    <input type="text" name="cart[<?php echo $product->unique_id;?>][quantity_stock]" value="<?php echo $product->in_stock;?>" size="3" maxlength="3" />
    <input type="submit" value="Add to cart" />
</form>

php,

public function add_item($item_array)
    {

        foreach ($item_array as $unique_id => $info)
        {

            # Check if the content array does not exist yet.
            if (isset($this->content[$unique_id])) 
            {
                $this->content[$unique_id]['quantity_request']++;
                $this->content[$unique_id]['quantity_stock'] = $this->content[$unique_id]['quantity_stock'];
                $this->content[$unique_id]['time_created'] = time();

                # Check if the quantity request exceeds quanity in stock.
                if($this->content[$unique_id]['quantity_request'] > $this->content[$unique_id]['quantity_stock'])
                {
                    # If it does, then set the quantity request to quanity in stock.
                    $this->content[$unique_id] = array(
                        'quantity_request' => $this->content[$unique_id]['quantity_stock'], 
                        'quantity_stock' => $this->content[$unique_id]['quantity_stock'],
                        'time_created' => time(),
                        'error' => 'The quantity you requested on this item is exceeding the quantity in our stock.'
                    );
                }
            } 
            else 
            {
                //$this->content[$unique_id] = array('quantity_request' => 1, 'quantity_stock' => $this->content[$unique_id]['quantity_stock'],'time_created' => time());

                # Create the content array, $unique_id as the key.
                # If it does, then set the quantity request to quanity in stock.
                $this->content[$unique_id] = array(
                    'quantity_request' => 1,
                    'quantity_stock' => $info['quantity_stock'],
                    'time_created' => time()
                );
            }

        }
    }

1 Ответ

0 голосов
/ 28 ноября 2011

Вы сбрасываете $ i в 0 в начале, что делает $ i ++ неактуальным, поэтому при добавлении другой записи она перезаписывает старую. Попробуйте $ this-> content [], чтобы он просто добавлялся к последнему.

...