Prestashop从DB返回内爆数组的最后一个值



我开始摆弄Prestashop 1.7模块,遇到了这种奇怪的行为。

我有这个代码来保存值从表单张贴到数据库(工作正常(

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((,在这种情况下,我的DB值是(1,3,9(

array(1) { [0]=> string(1) "9" }

如您所见,Configuration::get((只获取最后一个字符串值。有趣的行为是,当我更新数据并停留在同一页面时,一切都很好,数据也被正确提取,但当我离开模块配置页面并返回时,问题就会发生。也许我遗漏了一些代码片段?我还是个新手。如果需要,我可以提供更多的代码。

我不知道你的具体目标是什么,但无论如何,使用Prestashop自己的函数总是很方便的。保存和选择配置变量例如,以json格式保存值

Configuration::updateValue('MYVALUES', Tools::jsonEncode(Tools::getValue('MYVALUES')), true );

例如,获取值

Tools::jsonDecode( Configuration::get( 'MYVALUES' );

我发现了一个肮脏的解决方法,可以正确地从DB中获取内爆值。也许有人会用它。

$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']);

最新更新