回音购物车,其中包含已添加到购物车

时间:2017-08-08 04:14:52

标签: php cart

我一直在关注ecom网络教程,我一直在多次更改代码,但仍然没有做到正确。问题是根据产品数量而不是产品ID更改购物车旁边的回显数字

图片示例: enter image description here

Shop.php代码:

<a href="#tab2">CART <span class="badge">
<?php
    if(isset($_SESSION["shopping_cart"])) {
        echo count($_SESSION["shopping_cart"]);
    } else {
        echo '0';}
?>
</span></a>

action.php代码:

<?php
if (isset($_POST["product_id"])) {
    $order_table = '';
    $message = '';
    if ($_POST["action"] == "add") {
        if (isset($_SESSION["shopping_cart"])) {
            $is_available = 0;
            foreach ($_SESSION["shopping_cart"] as $keys => $values) {
                if ($_SESSION["shopping_cart"][$keys]['product_id'] == $_POST["product_id"]) {
                    $is_available++;
                    $_SESSION["shopping_cart"][$keys]['product_quantity'] = $_SESSION["shopping_cart"][$keys]['product_quantity'] + $_POST["product_quantity"];
                }
            }
            if ($is_available < 1) {
                $item_array = array(
                    'product_id'        => $_POST["product_id"],
                    'product_name'      => $_POST["product_name"],
                    'product_price'     => $_POST["product_price"],
                    'product_quantity'  => $_POST["product_quantity"]
                );
                $_SESSION["shopping_cart"][] = $item_array;
            }
       } else {
            $item_array = array(
                'product_id'        => $_POST["product_id"],
                'product_name'      => $_POST["product_name"],
                'product_price'     => $_POST["product_price"],
                'product_quantity'  => $_POST["product_quantity"]
            );
            $_SESSION["shopping_cart"][] = $item_array;
       }
    }
}
?>

4 个答案:

答案 0 :(得分:0)

您希望使用循环来存储购物车中每件商品的数量:

function getCartQty()
    {
        # If there is nothing in the cart, return 0
        if(empty($_SESSION['shopping_cart']))
            return 0;
        # Store array
        $qty = array();
        # Loop items in cart
        foreach($_SESSION["shopping_cart"] as $item){
            # Store the quantity of each item
            $qty[] =  $item['product_quantity'];
        }
        # Return the sum
        return array_sum($qty);
    }
?>
<a href="#tab2">CART <span class="badge"><?php echo getCartQty() ?></span></a>

答案 1 :(得分:0)

count()将返回数组中的元素数。在存储在$ _SESSION数组中的购物车阵列上运行时,您将计算唯一产品的数量。

由于每个产品都有数量值,您需要检索它们的总和。这是一个可用于执行该计算的函数:

function my_shopping_cart_total_product_count() {
    $product_count = 0;

    if ( isset( $_SESSION['shopping_cart'] ) ) {
        $product_count = array_sum( array_column( $_SESSION['shopping_cart'], 'product_quantity' ) );
    } 

    return $product_count;
}

在上面的示例中,我使用array_column来获取包含所有产品数量的数组。然后我通过array_sum运行它以获得总数。你当然可以简单地使用foreach循环。

<强>用法:

<a href="#tab2">CART <span class="badge"><?php echo my_shopping_cart_total_product_count(); ?></span></a>

<强>文档

附加说明:

action.php中的代码非常令人担忧。似乎缺乏用户输入清理。我建议研究数据清理以提高安全性。

答案 2 :(得分:0)

您可以更改Magento后端中的设置以获取项目总数而不是不同产品的数量:

  1. 系统&gt;配置&gt;销售&gt;结帐。
  2. 我的购物车链接&gt;显示购物车摘要。
  3. 将此项设置为:显示购物车中的商品数量。
  4. 这适用于默认的Magento主题,因此您可以使其适用于您自己的主题。

答案 3 :(得分:0)

你也可以试试这个:

# return shopping cart items count means how many sku add to shopping cart
Mage::helper('checkout/cart')->getItemCount()

# return shopping cart items summary (suppose you add sku1 6 qty and sku2 3 qty = total 9 qty return)
Mage::helper('checkout/cart')->getSummaryCount()

来源:https://magento.stackexchange.com/a/23496/46249

注意:不要在Magento中使用$_SESSION,还有其他方法。