我正在为Prestashop创建一个新模块,用户可以从第三方服务设计自己的产品。当用户稍后将产品添加到购物车时,我希望保存从用户设计产品的第三方服务中获取的ID。
我想最好的方法是在Prestashop中创建一个名为“designID”的自定义文本字段。现在我想知道如何通过Prestashop中的模块开发将数据保存到此字段,而不是让用户手动填写数据。
基本上......当用户将产品添加到购物车时,如何从Prestashop模块中向这些可自定义字段添加数据?
答案 0 :(得分:0)
如果您是简单用户且未设计模块,则使用这些自定义字段。用它来保存designID只是一个黑客攻击。
由于您正在创建一个新模块,我的建议是将第三方ID保留在新创建的数据库表中,该表将匹配id_product,id_design,id_cart,id_order等...
您可以挂钩“actionCartSave”并添加包含匹配ID的记录,以及您桌上所有其他所需数据。
如果您想坚持自定义功能,请添加示例字段并查看以下数据库表:
ps_customization ps_customization_field ps_customization_field_lang ps_customized_data
并在收到第三方ID时复制更改。
如果要自定义所有产品,请考虑在ps_customization_field&中添加所需数据。模块安装过程中ps_customization_field_lang(字段结构的表),所以在安装完成后你就可以填写了 ps_customization& ps_customized_data(字段数据的表)
PrestaShop没有适当的API来添加自定义项,仅用于检索数据,因此您必须自己编写SQL查询。只需查看ProductController的ps_customization& ps_customized_data更改和ps_customization_field&的AdminProductsController; ps_customization_field_lang。
不要忘记从您的产品中删除自定义标记代码&购物车模板。
答案 1 :(得分:0)
我能够自己找到这个,首先尝试使用Customization几个小时而没有任何成功。
基本上我的模块工作原理是客户可以打开弹出iframe到第三方设计工具,然后客户将设计保存在iframe中,iframe然后将数据发送到父窗口(Prestashop窗口)。
为了存储这个,我做了以下事情:
挂钩到产品页面上的任何显示挂钩,并检查是否发送了包含来自第三方模块的数据的任何发布数据。如果是,那么:
if(isset($_POST['thirdparty'])){
$id_product = (int)Tools::getValue('id_product');
if (!$this->context->cart->id){
$this->context->cart->add();
if ($this->context->cart->id)
$this->context->cookie->id_cart = (int)$this->context->cart->id;
}
$this->context->cart->updateQty(1, $id_product);
if(!Db::getInstance()->update('cart_product', array('id_design'=> pSQL(trim($_POST['thirdparty']))) ,'id_cart = '.$this->context->cart->id.' AND id_product = '.(int)Tools::getValue('id_product') ))
$this->context->controller->_errors[] = Tools::displayError('Error: ').mysql_error();
}
所以基本上首先我检查是否设置了POST,然后检查是否存在任何购物车,如果购物车不存在则添加一个新购物车 - > add()(此功能需要数小时才能找到,0文档)。 updateQty()用于使用新产品更新购物车。
最后一部分是SQL查询,它使用从第三方发送的数据更新id_design列的值。