在官方Prestashop论坛上没有得到任何回应,我想我会尝试转向你们,我的第一篇文章。谢谢阅读。
我正在建立一个销售个性化商品的网站,我必须限制每个商品的自定义字段中输入的字符,Prestashop仍然遗漏了这个功能,所以我正努力自己整合这个功能。
稍微修改了一下,我的前端工作得很好,使用maxlength来限制自定义输入字段中允许的字符,使用从ps_customization_field中的新字段“max_chars”中的数据库读取的值(在时刻)
但是现在我已经达到了我的知识极限,就像我一直在狩猎和修补我无法完成最后一点,所以希望有更多知识渊博的人比我能帮助。
基本上,在后台创建自定义字段时,我需要一个额外的输入字段,允许我为每个自定义输入max_chars,然后我需要将此值写入ps_customization_field表的max_chars
字段中的数据库。
TL:DR如何在后台产品定制区域中创建新字段并将输入保存到数据库。
亲切的问候,克莱夫
您关于“如何将输入保存到我的数据库”的问题过于宽泛,无法在一个答案中得到解答。查看SQL查询和PDO的工作方式,因为它们可能会让您了解如何启动。
在前端中显示自定义字段可以使用Smarty进行以下操作:
{foreach $inputfields as $field}
<input type="{$field.type}" name="{$field.name}" maxlength="{$field.maxlength}">
{/foreach}
我认为你应该为此创建一个模块。只需创建一个向管理产品控制器添加选项卡的模块,并列出创建的所有自定义字段。然后,使用简单的id_customization => maxcharacter关系创建一个表单。
您需要的最后一件事是在此模块中创建一个钩子并将其添加到保存自定义的产品前端控制器中(我认为在initContent内)。这个钩子将进行验证,并可能通过抛出错误(当然是prestashop的错误)来取消该过程。
有了它,您可以为字段添加一些额外的验证,例如类型验证或其他任何内容。
如果你从来没有成功,你应该试试这个:create a module
以下是一些额外的线索:
挂钩额外的产品标签:
$this->registerHook('displayAdminProductsExtra')
创建验证钩子:
$this->registerHook('CFvalidation')
处理它 :
public function hookCFvalidation($param)
{
//Validate the customized values in the $_POST
//return formated errors if any or nothing if it's valid
}
将其添加到覆盖产品控制器中:
[...]
if (Tools::isSubmit('submitCustomizedDatas'))
{
$this->errors[] = Hook::exec('CFvalidation');
[...]
}
要显示输入,您需要覆盖_displayLabelField
中的方法controllers/admin/AdminProdutsController.php
。
要更新字段,您需要覆盖updateLabels
中的方法classes/Product.php
。