Prestashop returns 来自数据库的内爆数组的最后一个值
Prestashop returns last value of imploded array from DB
我开始摆弄 Prestashop 1.7 模块,我 运行 陷入了这种奇怪的行为。
我有这段代码可以将表单 post 中的值保存到数据库(工作正常)
protected function postProcess()
{
$form_values = $this->getConfigFormValues();
foreach (array_keys($form_values) as $key) {
Configuration::updateValue($key, Tools::getValue($key));
if($key == 'MSLT_MEGAMENU_CATEGORIES'){
$categories = implode(",",Tools::getValue($key));
Configuration::updateValue('MSLT_MEGAMENU_CATEGORIES', $categories);
}else{
$this->errors[]=$this->l('Please select categories to display');
}
}
}
然后我使用这段代码从数据库中获取这些值(工作正常)
protected function getConfigFormValues()
{
$categories = explode(',',Configuration::get('MSLT_MEGAMENU_CATEGORIES', true));
return array(
'MSLT_MEGAMENU_LIVE_MODE' => Configuration::get('MSLT_MEGAMENU_LIVE_MODE', true),
'MSLT_MEGAMENU_CATEGORIES' => $categories,
'MSLT_MEGAMENU_ACCOUNT_EMAIL' => Configuration::get('MSLT_MEGAMENU_ACCOUNT_EMAIL', 'contact@prestashop.com'),
'MSLT_MEGAMENU_ACCOUNT_PASSWORD' => Configuration::get('MSLT_MEGAMENU_ACCOUNT_PASSWORD', null),
);
}
和用值填充表单的助手
$helper->tpl_vars = array(
'fields_value' => $this->getConfigFormValues(), /* Add values for your inputs */
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id,
);
return $helper->generateForm(array($this->getConfigForm()));
这是尝试从数据库加载值时的 var_dump(),对于这种情况,我的数据库值为 (1,3,9)
array(1) { [0]=> string(1) "9" }
如您所见,Configuration::get() 仅获取最后一个字符串值。
有趣的行为是,当我更新数据并停留在同一页面时,一切正常并且数据被正确获取,但是当我离开模块配置页面并返回时,问题发生了。也许我遗漏了一些代码片段?我还是个新手。如果需要我可以提供更多代码。
我发现从数据库中正确获取内爆值的肮脏解决方法。也许有人会用到。
$sql = 'SELECT * FROM '._DB_PREFIX_.'configuration WHERE name = "MSLT_MEGAMENU_SELECTED_CAT"';
$value = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql);
$selected = explode(',',$value['value']);
我不知道你的具体目标是什么,但无论如何使用Prestashop自带的功能总是很方便的。
保存并 select 配置变量
例如,以 json 格式保存值
Configuration::updateValue('MYVALUES', Tools::jsonEncode(Tools::getValue('MYVALUES')), true );
例如,获取值
Tools::jsonDecode( Configuration::get( 'MYVALUES' );
我开始摆弄 Prestashop 1.7 模块,我 运行 陷入了这种奇怪的行为。
我有这段代码可以将表单 post 中的值保存到数据库(工作正常)
protected function postProcess()
{
$form_values = $this->getConfigFormValues();
foreach (array_keys($form_values) as $key) {
Configuration::updateValue($key, Tools::getValue($key));
if($key == 'MSLT_MEGAMENU_CATEGORIES'){
$categories = implode(",",Tools::getValue($key));
Configuration::updateValue('MSLT_MEGAMENU_CATEGORIES', $categories);
}else{
$this->errors[]=$this->l('Please select categories to display');
}
}
}
然后我使用这段代码从数据库中获取这些值(工作正常)
protected function getConfigFormValues()
{
$categories = explode(',',Configuration::get('MSLT_MEGAMENU_CATEGORIES', true));
return array(
'MSLT_MEGAMENU_LIVE_MODE' => Configuration::get('MSLT_MEGAMENU_LIVE_MODE', true),
'MSLT_MEGAMENU_CATEGORIES' => $categories,
'MSLT_MEGAMENU_ACCOUNT_EMAIL' => Configuration::get('MSLT_MEGAMENU_ACCOUNT_EMAIL', 'contact@prestashop.com'),
'MSLT_MEGAMENU_ACCOUNT_PASSWORD' => Configuration::get('MSLT_MEGAMENU_ACCOUNT_PASSWORD', null),
);
}
和用值填充表单的助手
$helper->tpl_vars = array(
'fields_value' => $this->getConfigFormValues(), /* Add values for your inputs */
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id,
);
return $helper->generateForm(array($this->getConfigForm()));
这是尝试从数据库加载值时的 var_dump(),对于这种情况,我的数据库值为 (1,3,9)
array(1) { [0]=> string(1) "9" }
如您所见,Configuration::get() 仅获取最后一个字符串值。 有趣的行为是,当我更新数据并停留在同一页面时,一切正常并且数据被正确获取,但是当我离开模块配置页面并返回时,问题发生了。也许我遗漏了一些代码片段?我还是个新手。如果需要我可以提供更多代码。
我发现从数据库中正确获取内爆值的肮脏解决方法。也许有人会用到。
$sql = 'SELECT * FROM '._DB_PREFIX_.'configuration WHERE name = "MSLT_MEGAMENU_SELECTED_CAT"';
$value = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql);
$selected = explode(',',$value['value']);
我不知道你的具体目标是什么,但无论如何使用Prestashop自带的功能总是很方便的。 保存并 select 配置变量 例如,以 json 格式保存值
Configuration::updateValue('MYVALUES', Tools::jsonEncode(Tools::getValue('MYVALUES')), true );
例如,获取值
Tools::jsonDecode( Configuration::get( 'MYVALUES' );