Перейти к содержанию
Zuveh

Повторное использование переменных. Нужна помощь.

Рекомендуемые сообщения

Доброго времени суток!

Не могу найти нигде каким образом можно добавить в свой модуль настроек уже существующую переменную ocstore. Допустим, мне нужно (ну не хочется скакать по вложенным веткам настроек) включить переменную (например config_product_count) в свой модуль. Такой код:

		if (isset($this->request->post['config_product_count'])) {
			$data['config_product_count'] = $this->request->post['config_product_count'];
		} else {
			$data['config_product_count'] = $this->config->get('config_product_count');
		}

не работает. Вернее работает только наполовину. Переменная отображается, но её изменение не сохраняется в базе. Подскажите, плиз, что не так делаю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

конкретную настройку можно получить так
 

$data['config_product_count'] = $this->config->get('config_product_count');

сохранить так
 

$this->config->set('config_product_count', $data['config_product_count']);

 

Изменено пользователем thentru
  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в чем принципиальное отличие конструкции

$this->config->set('config_product_count', $data['config_product_count']);

от стандартно используемой в контроллере

$data['config_product_count'] = $this->request->post['config_product_count'];

?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, Zuveh сказал:

Переменная отображается, но её изменение не сохраняется в базе. Подскажите, плиз, что не так делаю?

 

проверяйте шаблон, скорей всего там загвоздка

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в первом случае - сохранение в базу
во втором случае - получение данных из формы ввода

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и сохранение значения переменной, полученной из формы ввода, в базу. не?

Изменено пользователем Zuveh

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

AlexDW, в шаблоне всё стандартно.

                    <div class="col-sm-10">
                      <label class="radio-inline">
                        <?php if ($config_product_count) { ?>
                        <input type="radio" name="config_product_count" value="1" checked="checked" />
                        <?php echo $text_yes; ?>
                        <?php } else { ?>
                        <input type="radio" name="config_product_count" value="1" />
                        <?php echo $text_yes; ?>
                        <?php } ?>
                      </label>
                      <label class="radio-inline">
                        <?php if (!$config_product_count) { ?>
                        <input type="radio" name="config_product_count" value="0" checked="checked" />
                        <?php echo $text_no; ?>
                        <?php } else { ?>
                        <input type="radio" name="config_product_count" value="0" />
                        <?php echo $text_no; ?>
                        <?php } ?>
                      </label>
                    </div>
                  </div>

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

чудес не бывает

может вы код за пределы формы вынесли?

 

смотрите в консоли что у вас в запросе передается при сохранении

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

за пределы формы - не выносил.

в дампе: ["config_product_count"]=> string(1) "1" 

или

["config_product_count"]=> string(1) "0"

в зависимости от текущего значения переменной. все изменения в форме сохраняются. все, кроме изменений переменной ocstore.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

покажите код, отвечающий за сохранение данных с формы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
		if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
			$this->model_setting_setting->editSetting('showcase', $this->request->post);

			$this->session->data['success'] = $this->language->get('text_success');

			$this->response->redirect($this->url->link('extension/module/showcase', 'token=' . $this->session->data['token'] . '&type=module', true));
		}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ещё раз повторюсь: все изменения в форме (несколько десятков переменных) сохраняются в базе. все, кроме переменной взятой из setting.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
$this->model_setting_setting->editSetting('showcase', $this->request->post);

так правильно вы сохраняете только свои настройки

добавьте после этой строки
 

$this->config->set('config_product_count', $this->request->post['config_product_count']);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в смысле? сохраняются данные переданные из формы. какая разница откуда получено значение, которое содержится в одной из переменных формы, вынуто из базы или инициировано действиями пользователя с помощью предоставленных ему инструментов ?

форма передает массив переменных содержащих новые данные. ВСЕ изменения сохраняются, КРОМЕ тех, которые должны перезаписать одно из значений другого контроллера.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на всякий случай проверил. ничего не изменилось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемый, зачем вы мне что-то доказываете?
Откройте модель model_setting_setting и посмотрите как работает метод editSetting
все ваши переменные, которые сохраняются имеют в начале showcase_ это ключ ваших настроек
Переменная с названием config_product_count имеет ключ config, поэтому при попытке сохранения под ключом showcase, эта переменная не проходит проверку и отбрасывается

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, thentru сказал:

Переменная с названием config_product_count имеет ключ config, поэтому при попытке сохранения под ключом showcase, эта переменная не проходит проверку и отбрасывается

вот и причина

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
52 minutes ago, Zuveh said:

на всякий случай проверил. ничего не изменилось.

 

thentru

Я никому, ничего не доказываю. Я прошу помочь и пытаюсь разобраться с помощью сообщества, с тем, что не смог понять сам. А поскольку я не медведь (наверное к сожалению), мне нужно понимать для чего нужно крутить педали, что бы крутить их осознанно. Если Вас корёжит обсуждение, то будьте добры, либо не участвуйте в помощи, либо, уж если назвались "груздем", то дайте развернутый ответ, что бы было понятно что, куда и зачем, поскольку поучать просто, а УМЕТЬ ОБЪЯСНИТЬ - это талант, что дорогого стоит.

 

А форма обращения "Уважаемый" применима в начале общения. Появление же такой формы в середине процесса общения (переписки), имеет пренебрежительный контекст, тем более, что собеседник НИКОГДА не проявлял лично к Вам никаких негативных эмоций. Более того, её использование БЕЗ дополнительного упоминания имени-отчества/товарищ(господин)-фамилия/коллега/доктор наук и проч., опускает уровень общения на базарно-полицейский сленг.

НЕ СОВЕТ. Мнение. Мои питерские друзья стараются избегать такого общения с незнакомыми людьми, да и вообще с кем бы то ни было, хотя бы потому, что не хотят позорить культурную столицу России.

Изменено пользователем Zuveh

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@Zuveh ни в коем случае не хотел вас как-то задеть или обидеть.
Нужна помощь - я дал совет с примером как это работает. Не знал бы - прошел мимо.
А если у вас что-то не получается, значит где-то что-то упущено

Изменено пользователем thentru

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 hour ago, Zuveh said:

на всякий случай проверил. ничего не изменилось.

 

Спасибо огромное, но, как я уже писал выше - не изменилось ничего.. не сохраняет именно эту настройку.

 

P.S. Я и не обижался.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
		if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
			//var_dump($this->request->post);			
			$this->model_setting_setting->editSetting('showcase', $this->request->post);
			$this->config->set('config_product_count', $this->request->post['config_product_count']);

			$this->session->data['success'] = $this->language->get('text_success');

			$this->response->redirect($this->url->link('extension/module/showcase', 'token=' . $this->session->data['token'] . '&type=module', true));
		}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

переименуйте в контроллере и шаблоне config_product_count в showcase_config_product_count

и будет счастье ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Странно почему у вас не работает метод
Можно конечно совсем извратиться, чтобы сохранить именно этот конфиг
 

$product_count = array(
  'config_product_count' => (int)$this->request->post['config_product_count']
);
$this->model_setting_setting->editSetting('config', $product_count);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 hours ago, AlexDW said:

переименуйте в контроллере и шаблоне config_product_count в showcase_config_product_count

и будет счастье ;)

 

это в общем то бессмысленно, поскольку отрезает саму "системную" переменную, и создает свою с тем же функционалом. хотя, если посмотреть глубже - моя затея - тоже не совсем айс.. :D

 

thentru,

я и сам не могу понять.. она не может быть заблокирована для записи вне родного контроллера ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.