如何从Prestashop模块访问可自定义的文本字段?

如何从Prestashop模块访问可自定义的文本字段?,prestashop,prestashop-1.5,Prestashop,Prestashop 1.5,我正在为Prestashop创建一个新模块,用户可以通过第三方服务设计自己的产品。当用户稍后将产品添加到他们的购物车时,我想保存一个ID,该ID是从用户设计其产品的第三方服务获得的 我想最好的方法是在Prestashop中创建一个名为“designID”的自定义文本字段。现在,我想知道如何将Prestashop中模块开发的数据保存到此字段,而不是让用户手动填写数据 所以基本上。。。当用户将产品添加到购物车中时,如何从Prestashop模块中向这些可自定义字段添加数据?如果您是简单用户且未设计模

我正在为Prestashop创建一个新模块,用户可以通过第三方服务设计自己的产品。当用户稍后将产品添加到他们的购物车时,我想保存一个ID,该ID是从用户设计其产品的第三方服务获得的

我想最好的方法是在Prestashop中创建一个名为“designID”的自定义文本字段。现在,我想知道如何将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数据。若有,则:

    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列的值