Jump to content
Sign in to follow this  
Zuveh

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

Recommended Posts

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

Не могу найти нигде каким образом можно добавить в свой модуль настроек уже существующую переменную 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');
		}

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

Edited by thentru
  • +1 1

Share this post


Link to post
Share on other sites

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

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

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

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

?

Share this post


Link to post
Share on other sites
2 часа назад, Zuveh сказал:

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Edited by Zuveh

Share this post


Link to post
Share on other sites

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>

 

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

или

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

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
		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));
		}

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
$this->model_setting_setting->editSetting('showcase', $this->request->post);

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

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

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

 

Share this post


Link to post
Share on other sites

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

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

  • +1 1

Share this post


Link to post
Share on other sites
1 минуту назад, thentru сказал:

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

вот и причина

Share this post


Link to post
Share on other sites
52 minutes ago, Zuveh said:

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

 

thentru

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

 

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

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

Edited by Zuveh

Share this post


Link to post
Share on other sites

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

Edited by thentru

Share this post


Link to post
Share on other sites
1 hour ago, Zuveh said:

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

 

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

 

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

Share this post


Link to post
Share on other sites
		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));
		}

 

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

 

Share this post


Link to post
Share on other sites
2 hours ago, AlexDW said:

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

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

 

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

 

thentru,

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.