php - PrestaShop:使用 ObjectModel 保存 MultiSelect
问题描述
我正在尝试通过添加多选选项来扩展制造商类。这就是它的样子:
public function renderForm()
{
global $shopOptions;
$this->fields_form_override = array(
array(
'type' => 'select',
'label' => $this->l('Shops'),
'name' => 'shops',
'class' => 'chosen',
'multiple' => true,
'required' => true,
'options' => array(
'query' => $shopOptions,
'id' => 'id',
'name' => 'name'
),
),
);
return parent::renderForm();
}
数据在这里检索:
public function __construct() {
parent::__construct();
global $shopOptions;
$shopSQL = 'SELECT id_test_shop, name FROM '._DB_PREFIX_.'test_shop WHERE active=1';
$result = Db::getInstance()->ExecuteS($shopSQL);
foreach ($result as $row) {
$shopOptions[] = array(
"id" => (int)$row["id_test_shop"],
"name" => $row["name"]
);
}
}
然后我修改了 Manufacturer.php 中的定义变量,如下所示:
$definition["fields"]["shops"] = array('type' => self::TYPE_STRING)
这一切似乎都有效,但保存在数据库中的值是空白的,可能是因为它不知道如何处理多选值。
我基本上是想在数据库中放置一个像“1,2,3”这样的字符串。因此,我尝试修改 processsave 功能:
public function processSave()
{
if (Tools::isSubmit('submitAddManufacturer')) {
$_POST['shops'] = implode(',', Tools::getValue('shops'));
}
return parent::processSave();
}
但这只会让它崩溃,并显示“未定义的索引:商店 []”。
有谁知道我如何让它将选择值的 id 作为内爆字符串保存到数据库中?
谢谢!
解决方案
我认为您需要修改/创建Manufacturer.php
文件的方法add
,update
并使用它们将数据保存到新属性$this->shops
中。像这样的东西:
public function add($auto_date = true, $null_values = false)
{
if($shops = Tools::getValue('shops')) {
$this->shops = implode(',', $shops);
}
return parent::add($auto_date, $null_values);
}
与更新类似:
public function update($null_values = false)
{
if($shops = Tools::getValue('shops')) {
$this->shops = implode(',', $shops);
}
return parent::update($null_values);
}
推荐阅读
- java - 如何使用 JPA 和 DB2 将 DATETIME 列映射到 Date 对象
- verilog - Systemverilog Vivado 中的增量操作未按预期工作
- android - 为什么 android studio 组装我们的 dyanimc 功能模块测试 apk?
- firebase - Firestore 中的嵌套对象具有不一致的字段名称
- node.js - nodejs问题将graphql上传文件发送到服务
- elasticsearch - 如何深拷贝elasticsearch QueryBuilder?
- html - CSS Flex 行方向与 50% 列拉伸
- string - 如何在 Rust 中匹配字符串和字符串?
- android - Webview第二次尝试不加载资产文件
- powershell - 使用 -ErrorAction STOP 时,Remove-CalendarEvents 失败