从购物车中删除OpenCart选项

时间:2014-03-14 14:33:59

标签: opencart

也许这很简单,但我无法理解它。

我希望能够从产品中删除选项,如果产品没有其他选项,请从购物车中删除该产品。

我查看了会话价值,但我没有看到那里的可能性:

2014-03-14 15:18:30 - Session Object
(
    [data] => Array
        (
            [language] => nl
            [currency] => EUR
            [cart] => Array
                (
                    [63:YToxOntpOjI7YTozOntpOjA7czoxOiIyIjtpOjE7czoyOiI0MSI7aToyO3M6MjoiODAiO319:YTozOntpOjI7YToxOntpOjA7czoxOiIxIjt9aTo0MTthOjE6e2k6MDtzOjE6IjIiO31pOjgwO2E6MTp7aTowO3M6MToiMSI7fX0=] => 1
                )

            [captcha] => dc9c56
            [customer_id] => 1
        )

)

我也没有看到数据库中可以轻松操作的数据。

我查看了library/cart.php文件,但似乎不可能......

(代码那里:)

public function remove($key) {
    if (isset($this->session->data['cart'][$key])) {
        unset($this->session->data['cart'][$key]);
    }

    $this->data = array();
}

所有人都知道如何做到这一点(好或脏,不在乎)?也许接收每个产品并删除一个并插入?

1 个答案:

答案 0 :(得分:2)

[63:YToxOntpOjI7YTozOntpOjA7czoxOiIyIjtpOjE7czoyOiI0MSI7aToyO3M6MjoiODAiO319:YTozOntpOjI7YToxOntpOjA7czoxOiIxIjt9aTo0MTthOjE6e2k6MDtzOjE6IjIiO31pOjgwO2E6MTp7aTowO3M6MToiMSI7fX0=] => 1

是product_id(63),后跟一个序列化的base64_encoded字符串,表示产品选项。

您可以对此进行解码并将其反序列化为数组,然后删除相关选项,检查是否有任何剩余等等...

Cart的getProducts()方法反序列化并解码它。这是相关代码:

foreach ($_SESSION['cart'] as $key => $quantity) {
        $is_on_special = 0;
        $product = explode(':', $key);
        $product_id = $product[0];
        $stock = true;

        // Options
        if (isset($product[1])) {
          $options = unserialize(base64_decode($product[1]));
        } else {
          $options = array();
        }