prestashop - 使用购物车创建新页面

时间:2013-06-14 09:23:23

标签: prestashop cart

我正在prestashop开发一个新功能,就像“快速购买”。我创建了一个新页面,其中有一个表单,我会在其中介绍产品代码和数量,然后按下一个按钮将它们保存在购物车中。

问题是,在成功登录后,如果我直接访问这个新页面,似乎购物车没有初始化,所以当我尝试存储新产品时,因为ps_cart中不存在新购物车,我无法正确保存它们。否则,在登录后,如果我使用prestashop典型方式添加产品(例如,从产品页面),则会成功创建购物车,因此可以使用我的方式添加更多产品,因为正在传播购物车的ID。

到目前为止,我所做的是这样的事情:

class QuickbuyControllerCore extends FrontController{

    public $php_self = 'quickbuy.php';

    public function init() {
        parent::init();
    }


    public function initContent() {
        parent::initContent();
        $this->setTemplate(_PS_THEME_DIR_.'quickbuy.tpl');
    }

    public function process(){
        global $cart, $cookie;
        // do some stuff to get product codes

        if(!empty($products)){
            foreach ($products as $id_product => $qty){
                $exists = Db::getInstance()->getValue('SELECT id_product FROM `'._DB_PREFIX_.'cart_product` WHERE id_product = ' . $id_product . ' AND id_cart = '.(int)$cart->id);

                if($exists === false){
                    $query = 'INSERT INTO `'._DB_PREFIX_.'cart_product`(`id_cart`, `id_product`, `id_product_attribute`, `quantity`, `date_add`) VALUES ';
                    $query .= '('.(int)$cart->id.', '.(int)$id_product.', 0 , '.(int)$unidades.', NOW()),';

                    $res = Db::getInstance()->Execute(rtrim($query, ','));
                }
                else{
                    $upd = 'UPDATE `'._DB_PREFIX_.'cart_product` SET quantity = quantity + ' . (int)$unidades . ' WHERE id_product = '.(int) $id_product.' AND id_cart = '.(int)$cart->id;
                    Db::getInstance()->Execute($upd);
                }
            }
        }
    }


    // Other methods like SetMedia, DisplayContent,...
}

Prestashop可能会调用一些方法来创建购物车,我想我要把它留下来,但我找不到我打电话来创建购物车的方法。

我也试过调用$ cart-> save()和$ cookie-> write(),这创建了一个新的购物车,但是当我刷新页面时,购物车的ID已经丢失。

有关购物车ID未通过网页传播的原因吗?

编辑:我忘了说我的prestashop版本是1.4.5.1

1 个答案:

答案 0 :(得分:1)

我正在从您的问题中提取答案,并将其发布在此处供未来的读者使用:

if (!isset($cart->id) OR !$cart->id){
    $cart->add();
    if ($cart->id)
        $cookie->id_cart = (int)($cart->id);
}