Новосибирск +7(983)

По всем вопросам :

Телеграм : @radgura

JoomShopping 5.х - сохранение параметров магазина затирает данные

Столкнулись с проблемой, после установки дополнений, сохранении параметров магазина стирает все данные кроме выбранной вкладки. Например настраиваем товары, при этом стираются "функции магазина", " товары" и тд. Все это происходит из-за не корректной работы плагинов по событию "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;
}

Это отфильтрует только те поля, которые были изменены в текущий момент.

Комментарии (0)

Здесь ещё нет оставленных комментариев.

Оставьте свой комментарий

  1. Добавление комментария от гостя.
Вложения (0 / 3)
Share Your Location

Как с нами связаться

По всем вопросам пишите  

Телеграм: @radgura

OnLine заказ

Отправить сообщение

Нажимая на кнопку «Отправить сообщение», я соглашаюсь:
* с условиями публичной оферты
* обработку моих персональных данных


RAD компоненты

Please publish modules in offcanvas position.