如何从Prestashop模块访问可自定义的文本字段?
我正在为Prestashop创建一个新模块,用户可以通过第三方服务设计自己的产品。当用户稍后将产品添加到他们的购物车时,我想保存一个ID,该ID是从用户设计其产品的第三方服务获得的 我想最好的方法是在Prestashop中创建一个名为“designID”的自定义文本字段。现在,我想知道如何将Prestashop中模块开发的数据保存到此字段,而不是让用户手动填写数据如何从Prestashop模块访问可自定义的文本字段?,prestashop,prestashop-1.5,Prestashop,Prestashop 1.5,我正在为Prestashop创建一个新模块,用户可以通过第三方服务设计自己的产品。当用户稍后将产品添加到他们的购物车时,我想保存一个ID,该ID是从用户设计其产品的第三方服务获得的 我想最好的方法是在Prestashop中创建一个名为“designID”的自定义文本字段。现在,我想知道如何将Prestashop中模块开发的数据保存到此字段,而不是让用户手动填写数据 所以基本上。。。当用户将产品添加到购物车中时,如何从Prestashop模块中向这些可自定义字段添加数据?如果您是简单用户且未设计模
所以基本上。。。当用户将产品添加到购物车中时,如何从Prestashop模块中向这些可自定义字段添加数据?如果您是简单用户且未设计模块,则使用这些自定义字段。使用它来保存designID将只是一个小技巧 由于您正在创建一个新模块,我的建议是将第三方ID保存在一个新创建的数据库表中,该表将匹配ID_产品、ID_设计、ID_购物车、ID_订单等 您可以挂接到“actionCartSave”,并在表中添加具有匹配ID的记录和所有其他必需数据 如果要坚持使用该自定义功能,请添加一个示例字段并查看以下数据库表: 定制 ps_自定义_字段 ps_定制_字段_lang ps_定制_数据 并在收到第三方ID时复制更改
如果您的所有产品都将被定制,请考虑在模块安装过程中在PSHutualStaseField&PSpSuuliStasiFieldLangLangy(字段结构表)中添加所需的数据,因此在安装完毕后,您只需填写即可。 ps_定制&ps_定制_数据(字段数据表)
PrestaShop没有用于添加自定义项的适当API,仅用于检索数据,因此您必须自己编写SQL查询。只需查看ProductController中的ps_定制和ps_定制数据更改,以及AdminProductsController中的ps_定制字段和ps_定制字段不要忘记从您的产品和购物车模板中删除自定义标记代码。我自己首先尝试使用自定义标记几个小时,但没有成功 因此,我的模块的基本工作原理是,客户可以向第三方设计工具打开弹出式iframe,然后客户将设计保存在iframe中,然后iframe将数据发送到父窗口(Prestashop窗口) 因此,为了存储这些信息,我执行了以下操作:
- 向数据库表ps\U cart\U product中添加一个新列
- 钩住产品页面上的任何显示钩子,检查是否发送了包含第三方模块数据的post数据。若有,则:
因此,基本上首先我检查是否设置了POST,然后我检查是否存在任何购物车,如果购物车不存在,则使用->add()添加一个新购物车(此函数花费数小时查找,0个文档)。updateQty()用于使用新产品更新购物车 最后一部分是SQL查询,它使用从第三方发送的数据更新id_design列的值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(); }