【问题标题】:Prestashop - Problem with cart quantity update in headerPrestashop - 标题中的购物车数量更新问题
【发布时间】:2022-10-25 18:10:10
【问题描述】:

我制作了一个模块,我需要在其中获取或创建 Cart 对象以将产品添加到购物车中。

在“添加到购物车”操作中,如果上下文已经创建了一个购物车,我称之为这个购物车,当我添加产品时,购物车图标旁边的“1”会立即出现。

if ($this->context->cookie->id_cart){
    $cart = $this->context->cart;
    $cart->my_custom_field = Tools::getValue('svgTemplateResult'); // Here I add a value to a new field I made
    $cart->update();
}

// Update the shopping cart
$cart->updateQty(1, $this->getProductId(), $id_product_attribute = null, $id_customization = false, $operator = 'up', $id_address_delivery = 0, $shop = null, $auto_add_cart_rule = true);

如果上下文中没有购物车,我需要像在某处看到的那样创建它:

if ($cart->id == null){
    $cart = new Cart();
    $cart->id_customer = (int)($this->context->cookie->id_customer);
    $cart->id_address_delivery = (int)  (Address::getFirstCustomerAddressId($cart->id_customer));
    $cart->id_address_invoice = $cart->id_address_delivery;
    $cart->id_lang = (int)($this->context->cookie->id_lang);
    $cart->id_currency = (int)($this->context->cookie->id_currency);
    $cart->id_carrier = 1;
    $cart->recyclable = 0;
    $cart->gift = 0;
    $cart->add();
    $cart->my_custom_field = Tools::getValue('svgTemplateResult'); // Here I add a value to a new field I made
    $cart->update();
    $this->context->cookie->id_cart = (int)($cart->id);  
}

// Update the shopping cart
$cart->updateQty(1, $this->getProductId(), $id_product_attribute = null, $id_customization = false, $operator = 'up', $id_address_delivery = 0, $shop = null, $auto_add_cart_rule = true);

但是“1”不会立即出现在购物车图标旁边。我需要刷新页面才能看到它。

如果我不刷新页面但我再次单击“添加到购物车”按钮,它会立即刷新数字(因为购物车在上下文中,所以我们选择第一个选项)并且我有 2 倍的产品在购物车。

我能用这个做什么?

【问题讨论】:

    标签: php module prestashop cart


    【解决方案1】:

    您需要使用 JS AJAX 调用刷新购物车图标, 只需在您的模块中检查/重现当您从产品页面单击“添加到购物车”按钮时通常发生的情况。

    你会看到一个 ajax 调用ps_shoppingcart前控制器:

    /module/ps_shoppingcart/ajax
    

    有效载荷非常基本:

    id_customization: 0
    id_product: {id_product}
    id_product_attribute: {id_product_attribute}
    action: add-to-cart
    

    否则,对于“纯”PHP,您唯一的选择是在每次修改购物车后使用工具::重定向()

    【讨论】:

    • 感谢你的回答。抱歉耽搁了,我在度假 :) 我可以看到我错误地解释了我的问题。我的模块不使用 AJAX 来更新购物车图标。 “添加到购物车”按钮刷新页面,这就是调用控制器功能的方式。但即使刷新,当我第一次将产品添加到上下文中不存在的购物车时,图标仍停留在“0”,如果我再次刷新,我可以看到“1”。之后,“添加到购物车”将正确更新购物车图标“2”、“3”、“4”等。
    • 如果购物车存在于上下文中(之前已创建)并且也是空的。 “添加到购物车”按钮将像往常一样刷新页面,这次“1”将按预期出现。
    • 我刚刚找到了解决方案,感谢您的帮助!
    【解决方案2】:

    问题解决了,我只需要在点击“添加到购物车”之前在上下文中创建购物车(如果还没有的话),所以在 以模块前端控制器public function initContent() 为例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2014-09-12
      • 2020-11-12
      • 2011-08-01
      相关资源
      最近更新 更多