我希望购物车中的产品能够彼此分开。 PrestaShop中包含购物车行的表格为ps_cart_product
,并且在id_cart
,id_product
和id_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
,因此可能无法正确添加到购物车中。
答案 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'