在购物车中多次添加同一产品

时间:2017-06-01 16:03:01

标签: prestashop prestashop-1.6

我希望购物车中的产品能够彼此分开。 PrestaShop中包含购物车行的表格为ps_cart_product,并且在id_cartid_productid_attribute上有一个主键,因此我应该对"自定义&#做一些事情34;在PrestaShop。我知道有$cart->_addCustomization(),但在尝试使用模块自定义购物车中的产品后,我无法理解该功能:

public function hookActionCartSave($params)
{
    $cart = $this->context->cart;
    $last_cart_product = $cart->getLastProduct();

    $cart->_addCustomization(
        $last_cart_product['id_product'],
        $last_cart_product['id_product_attribute'],
        $index = 1,
        $type = 2,
        md5(time().$last_cart_product['id_product'].$last_cart_product['id_product_attribute']),
        10
    );
}

你可能会看到我硬编码了一些变量只是为了检查它。

目的

我希望客户以后能够自定义产品(上传文件)。我们假设我们有一个产品1 ,一个客户想要50个带有特定印刷品,另外50个带有另一个印刷品。定制过程将在下订单后完成(不同的问题,不是我的问题)。

这是做我想要的方式,如果是这样的话?

编辑: 到目前为止,我设法在数据库中添加自定义。但是,似乎并不完整。当我在$products打印出shopping-cart.tpl时,我看到["customization_quantity"] => NULL,因此可能无法正确添加到购物车中。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

public function hookActionCartSave($params)
{
    $last_cart_product = $this->context->cart->getLastProduct();
    $product = new Product($last_cart_product['id_product']);
    if ($product) {
        if (!$field_ids = $product->getCustomizationFieldIds()) {
            return;
        }

        $authorized_text_fields = array();
        foreach ($field_ids as $field_id) {
            if ($field_id['type'] == Product::CUSTOMIZE_TEXTFIELD) {
                $authorized_text_fields[(int)$field_id['id_customization_field']] = 'textField'.(int)$field_id['id_customization_field'];
            }
        }

        $print_reference = $this->uniqueCustomizationReference();

        $indexes = array_flip($authorized_text_fields);
        foreach ($authorized_text_fields as $field_name => $value) {
            $this->context->cart->addTextFieldToProduct($product->id, $field_name, Product::CUSTOMIZE_TEXTFIELD, $print_reference);
        }
    }
}

这样做对每件产品都有影响,可以选择定制,它增加了一个"定制"将该购物车行放入数据库。在这种情况下,最后只添加addTextFieldToProduct(),因为我希望每个购物车行都是一个单独的实体,称为“打印产品”。

在PrestaShop后台,您应该在Products >> Product {x} >> Customizations >> Text = 1 | label = 'print product'

下进行自定义