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

时间:2014-02-18 06:48:27

标签: prestashop prestashop-1.5

我正在为Prestashop创建一个新模块,用户可以从第三方服务设计自己的产品。当用户稍后将产品添加到购物车时,我希望保存从用户设计产品的第三方服务中获取的ID。

我想最好的方法是在Prestashop中创建一个名为“designID”的自定义文本字段。现在我想知道如何通过Prestashop中的模块开发将数据保存到此字段,而不是让用户手动填写数据。

基本上......当用户将产品添加到购物车时,如何从Prestashop模块中向这些可自定义字段添加数据?

2 个答案:

答案 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窗口)。

为了存储这个,我做了以下事情:

  • 将新列添加到数据库表ps_cart_product
  • 挂钩到产品页面上的任何显示挂钩,并检查是否发送了包含来自第三方模块的数据的任何发布数据。如果是,那么:

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