【问题标题】:How to access Customizable Text Fields From Prestashop Module?如何从 Prestashop 模块访问可自定义的文本字段?
【发布时间】:2014-03-17 18:18:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: prestashop prestashop-1.5


    【解决方案1】:

    如果您是简单用户并且不设计模块,则使用这些自定义字段。用它来保存 designID 只是一个技巧。

    由于您要创建一个新模块,我的建议是将第 3 方 ID 保留在新创建的数据库表中,该表将匹配 id_product、id_design、id_cart、id_order 等...

    您可以挂钩到“actionCartSave”并添加具有匹配 id 的记录,以及您表中的所有其他必需数据。

    如果您想坚持使用该自定义功能,请添加示例字段并查看以下数据库表:

    ps_customization ps_customization_field ps_customization_field_lang ps_customized_data

    并在您收到第 3 方 ID 时复制更改。

    如果您的所有产品都将被定制,请考虑在模块安装过程中在 ps_customization_field & ps_customization_field_lang(字段结构表)中添加所需的数据,这样安装后您只需填写 ps_customization & ps_customized_data(字段数据表)

    PrestaShop 没有用于添加自定义的适当 API,仅用于检索数据,因此您必须自己编写 SQL 查询。只需查看 ps_customization 和 ps_customized_data 更改的 ProductController 以及 ps_customization_field 和 ps_customization_field_lang 的 AdminProductsController。

    不要忘记从您的产品和购物车模板中删除自定义标记代码。

    【讨论】:

      【解决方案2】:

      我首先尝试使用自定义功能几个小时,但没有成功,我自己发现了这一点。

      所以基本上我的模块的工作方式是客户可以向第三方设计工具打开一个弹出 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() 用于用新产品更新购物车。

        最后一部分是使用第三方发送的数据更新 id_design 列的值的 SQL 查询。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        • 2020-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多