当前位置: 首页 > 知识库问答 >
问题:

在带有模块的Prestashop 1.7.6类别中添加自定义字段。如何保存在数据库?

凌征
2023-03-14

我正在Prestashop 1.7中创建一个模块。6在“我的类别管理”页面中添加一些自定义字段。以下是我的代码(来源于法语,使用了新的Symfony型号):

模块/类别自定义字段/categorycustomfields.php

    class Categorycustomfields extends Module
    {
        protected $config_form = false;

        public function __construct()
        {
            $this->name = 'categorycustomfields';
            $this->tab = 'administration';
            $this->version = '1.0.0';
            $this->author = 'abc';
            $this->need_instance = 0;

            $this->bootstrap = true;

            parent::__construct();

            $this->displayName = $this->l('Category Custom Fields');
            $this->description = $this->l('Add custom fields to category');

            $this->ps_versions_compliancy = array('min' => '1.7', 'max' => _PS_VERSION_);
        }

        public function install()
        {
            if (!parent::install()
                // Install Sql du module
                || !$this->_installSql()
                //Installation des hooks
                || !$this->registerHook('actionAdminCategoriesControllerSaveAfter')
                || !$this->registerHook('actionAdminCategoriesFormModifier')
            ) {
                return false;
            }

            return true;
        }

        public function hookActionCategoryFormBuilderModifier(array $params)
        {
            //Récupération du form builder
            /** @var \Symfony\Component\Form\FormBuilder $formBuilder */
            $formBuilder = $params['form_builder'];


            //Ajout de notre champ spécifique
            $formBuilder->add('color',

                \Symfony\Component\Form\Extension\Core\Type\TextType::class,
                [
                    'label' => $this->l('Color'), //Label du champ
                    'required' => false, //Requis ou non
                    'constraints' => [ //Contraintes du champs

                        new \Symfony\Component\Validator\Constraints\Length([
                            'max' => 20,
                            'maxMessage' => $this->l('Max caracters allowed : 20'),
                        ]),
                    ],
                    'data' => '' //Valeur du champ
                ]
            );

            $formBuilder->setData($params['data'], $params);
        }

        public function hookActionAfterCreateCategoryFormHandler(array $params)
        {
            $this->updateData($params['form_data'], $params);
        }


        public function hookActionAfterUpdateCategoryFormHandler(array $params)
        {
            $this->updateData($params['form_data'], $params);
        }


      //params not well used but for examples
        protected function updateData(array $data, $params)
        {
            $insertData = array(
                'id_category'  => (int)$params['id'],
                'id_lang'  => (int)$this->context->language->id,
                'color'   => $data['color'],
            );
            //Update database
            Db::getInstance()->insert( "ps_category_lang ", $insertData);

        }

    }

在updateData()方法中,我获得了带有category ID和lang ID的自定义字段,并使用Db Class方法insert()更新数据库中的颜色字段(颜色字段创建得很好)。

但在保存或更新时,出现以下错误:[PrestaShopDatabaseException代码0]。

也许数据库方法不好?谁能告诉我如何保存这些数据?

谢谢

共有3个答案

艾泽语
2023-03-14

我制作了这个模块,所以它可能对ps_CustomerEdula很有用

岳景明
2023-03-14

尝试这样更新:

$query = "UPDATE `"._DB_PREFIX_."category_lang` SET color='".$data['color']."' WHERE id_category = '".(int)$params['id']."' ";
Db::getInstance()->Execute($query);
荀嘉熙
2023-03-14
$cat = new Category((int)$params['id']);
$cat->color= $data['color'];
$cat->update();
 类似资料:
  • 我正在尝试用标准的Python日志记录到文件来替换一种旧的记录信息的方法。该应用程序目前有一个日志文件,它被设置为捕获信息和调试消息,所以我希望它在一个较低的级别,而不是由主日志捕获。 应用程序结构: 在和中是对旧的函数的调用,我不希望将该函数记录在中,但也不希望它们出现在文件中。 理想的工作方式是创建一个带有调试函数的包装器,该函数在新的级别上进行日志记录,我已经了解到这需要的扩展。 因此,在中

  • 我无法在gradle项目中添加自定义源代码集。如何初始化这里的版本号?我的gradle文件看起来像:

  • -以上代码自动生成ID。 如何将自定义ID的数据添加到火库?我的目的是创建自定义 ID 并将文本数据写入此集合。你可以帮我吗?谢谢。

  • 问题内容: 我创建了一个,并希望添加一个不属于我的模型的自定义字段。 我在此处找到了添加其他字段的说明,并尝试了以下操作: 当我添加此字段并调用我的函数时,则此字段不是字典的一部分。包含所有指定的模型字段,除了额外的字段。因此,我无法在覆盖的验证中访问此字段,可以吗? 当我将此字段添加到字段列表中时,如下所示: 然后我得到一个错误,因为它不是我的模型的一部分-正确的是因为我只想为此序列化器添加它。

  • 我有一个简单的签名方法来签署工作正常的PDF文档,它使用显示名称、位置、日期和原因的默认戳记来签署文档。 现在我的经理问我是否可以在上面再添加一个字段。让我们假设这是一个“电子邮件”字段,因为我还没有被告知他们想要什么。 我试着搜索并应用我找到的一些东西,但没有任何效果。 此外,有人问我是否可以删除/隐藏这4个默认字段的标签(日期、原因等...),我无法管理这样做,也找不到任何关于它的东西,我不知

  • 我会在Prestashop数据库的customers表中添加一个字段,但只有在安装模块时才添加。 我在我的模块定义中做到了: 现在,我看到我们可以重写一个类,但在我的模块文件夹中找不到如何重写它。例如,我会在Customers类中添加新字段,以便能够在我的模块中管理它。 我该怎么办?