使用模块在 Prestashop 1.7.6 类别中添加自定义字段。如何保存在数据库中?
Add custom field in Prestashop 1.7.6 category with a module. How to save in database?
我正在 Prestashop 1.7.6 中创建一个模块,以在我的类别管理页面中添加一些自定义字段。这是我的代码(来自法语 this source,使用了新的 Symfony 模型):
modules/categorycustomfields/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() 方法中,我使用类别 ID 和语言 ID 获取自定义字段,并使用 Db Class 方法 insert() 更新数据库中的颜色字段(颜色字段很好创建)。
但是当我保存或更新时,出现此错误:[PrestaShopDatabaseException 代码 0]。
可能数据库方法不好?有人能告诉我如何保存这些数据吗?
谢谢!
尝试这样更新:
$query = "UPDATE `"._DB_PREFIX_."category_lang` SET color='".$data['color']."' WHERE id_category = '".(int)$params['id']."' ";
Db::getInstance()->Execute($query);
$cat = new Category((int)$params['id']);
$cat->color= $data['color'];
$cat->update();
我制作了这个模块,所以也许它有用ps_customercedula
我正在 Prestashop 1.7.6 中创建一个模块,以在我的类别管理页面中添加一些自定义字段。这是我的代码(来自法语 this source,使用了新的 Symfony 模型):
modules/categorycustomfields/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() 方法中,我使用类别 ID 和语言 ID 获取自定义字段,并使用 Db Class 方法 insert() 更新数据库中的颜色字段(颜色字段很好创建)。
但是当我保存或更新时,出现此错误:[PrestaShopDatabaseException 代码 0]。
可能数据库方法不好?有人能告诉我如何保存这些数据吗?
谢谢!
尝试这样更新:
$query = "UPDATE `"._DB_PREFIX_."category_lang` SET color='".$data['color']."' WHERE id_category = '".(int)$params['id']."' ";
Db::getInstance()->Execute($query);
$cat = new Category((int)$params['id']);
$cat->color= $data['color'];
$cat->update();
我制作了这个模块,所以也许它有用ps_customercedula