Столкнулись с проблемой, после установки дополнений, сохранении параметров магазина стирает все данные кроме выбранной вкладки. Например настраиваем товары, при этом стираются "функции магазина", " товары" и тд. Все это происходит из-за не корректной работы плагинов по событию "onBeforeEditConfig..." и "onAfterEditConfig..."
В момент сохранения к выбранным парамтрам(страница параметров магазина) добавляются пустые значения остальных параметров и весь этот полу-пустой массив сохраняется в базу.
Решение:
1.Редактируем файл с процедурой подготовки данных:
\administrator\components\com_jshopping\Controller\ConfigController.php
в функцию function save() добавляем код:
function save()
{
$jshopConfig = \JSFactory::getConfig();
$tab = $this->input->getVar('tab');
$db = \JFactory::getDBO();
$dispatcher = \JFactory::getApplication();
$extconf = array('imageheader'=>'header.jpg', 'imagefooter'=>'footer.jpg');
$post = $this->input->post->getArray();
$dispatcher->triggerEvent('onBeforeSaveConfig', array(&$post, &$extconf));
$session = \JFactory::getApplication()->getSession(); $session->set('jshopping_conf',$post);.
.
.
}
2. Редактируем файл, сохраняющий данные:
\components\com_jshopping\Table\ConfigTable.php
в функцию "public function store($updateNulls = false)" добавляем код:
public function store($updateNulls = false)
{
$config_id = $this->id;
$session = \JFactory::getApplication()->getSession();
$configfieldmass=($session->get('jshopping_conf', array()));
$filedmass=array();foreach($configfieldmass as $key=>$val) $filedmass[]=$key;
foreach (get_object_vars($this) as $k => $v)
{
if (\is_array($v) || \is_object($v) || $k[0] === '_' || $k === 'id') {
continue;
}
if ($v === null && $updateNulls === false) {
continue;
}
$data = $this->getFieldFromKey($k, $config_id);
if (in_array($k,$filedmass))
{
if (isset($data->id) && $data->id)
{
$this->updateRow($data->id, $k, $v, $config_id);
} else
{
$this->insertRow($k, $v, $config_id);
}
}
}
return true;
}
Это отфильтрует только те поля, которые были изменены в текущий момент.