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

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

Здравствуйте!

 

Подскажите, а как можно реализовать переключение группы покупателя в шапке (как переключение языка)?

 

OCstore 2.3

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

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


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

Поясните тайный смысл сего действа?

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


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

Здравствуйте!

 

Подскажите, а как можно реализовать переключение группы покупателя в шапке (как переключение языка)?

 

OCstore 2.3

 

Можно.

http://prntscr.com/jueh4s

http://prntscr.com/juehs2

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


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

Поясните тайный смысл сего действа?

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

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


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

 

Учитывая краткий ответ, это не обсуждается в теме? :lol:

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


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

 

Учитывая краткий ответ, это не обсуждается в теме? 

а что обсуждать?

Реализация проста.

Напишите, с чем у вас сложности при реализации.

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


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

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

Для кого? Для покупателя? для админа?

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


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

Ну или вот так можно

gvObHIG6TbK4Wkclz-dRNA.png

  • +1 2

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


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

а что обсуждать?

Реализация проста.

Напишите, с чем у вас сложности при реализации.

Если это можно назвать попытками решения вопроса...

html

<form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" class="form-horizontal">
			<div class="col-lg-2">
				<select name="customer_group_id" id="input-customer-group" class="form-control">
					<?php foreach ($customer_groups as $customer_group) { ?>
						<?php if ($customer_group['customer_group_id'] == $customer_group_id) { ?>
							<option value="<?php echo $customer_group['customer_group_id']; ?>" selected="selected"><?php echo $customer_group['name']; ?></option>
						<?php } else { ?>
							<option value="<?php echo $customer_group['customer_group_id']; ?>"><?php echo $customer_group['name']; ?></option>
						<?php } ?>
					<?php } ?>
				</select>
			</div>
			<div class="buttons clearfix col-lg-2" style=" margin: 2px;">
			  <div class="pull-right">
				<input type="submit" value="Продолжить" class="btn btn-primary">
			  </div>
			</div>
		</form>

controller

if ($this->request->server['REQUEST_METHOD'] == 'POST') {
	$this->model_account_customer->editCustomerGroup($this->request->post);
}

 

По сути, запись идёт, но я хотел бы избавиться от action на страницу edit.

Я так понимаю у вас ajax?

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

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


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

Я так понимаю у вас ajax?

Всё верно

У Вас можно делать так:

$('#input-customer-group').change(function() {
 тут получаем selected
 и ajax меняем группу
});

 

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

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


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

Всё верно

 

Надеюсь, что у меня не всё так ужасно с кодом...

 

Сейчас в контроллере такая "картина"

if ($this->request->server['REQUEST_METHOD'] == 'POST') {
	$this->model_account_customer->editCustomerGroup($this->request->post);
}

$data['customer_group_id'] = $this->customer->getGroupId();

html выглядит как-то так

<form action="" method="post" enctype="multipart/form-data" class="form-horizontal">
			<div class="col-lg-2">
				<select name="customer_group_id" id="input-customer-group" class="form-control">
					<?php foreach ($customer_groups as $customer_group) { ?>
						<?php if ($customer_group['customer_group_id'] == $customer_group_id) { ?>
							<option value="<?php echo $customer_group['customer_group_id']; ?>" selected="selected"><?php echo $customer_group['name']; ?></option>
						<?php } else { ?>
							<option value="<?php echo $customer_group['customer_group_id']; ?>"><?php echo $customer_group['name']; ?></option>
						<?php } ?>
					<?php } ?>
				</select>
			</div>
			<div class="buttons clearfix col-lg-2" style=" margin: 2px;">
			  <div class="pull-right">
				<button id="cust_group" type="submit" class="btn btn-primary" value="Продолжить">Продолжить</button>
			  </div>
			</div>
		</form>

<script>
$('#cust_group').on('click', function() {
  $.ajax({
      type: 'post',
      url:  'index.php',
      dataType: 'json',
      success: function(json) {
			if (json['output']) {
				$('#cust_group').remove();
			}
      }
  });
});
</script>

 

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

Где я нарукожопил?

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

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


Ссылка на сообщение
Поделиться на другие сайты
$('#input-customer-group').change(function() {
	var id_groupe = $("#input-customer-group").val();
$.ajax({

             url: 'index.php?route=account/account/changeGroupe',

             type: 'post',

             data: 'id_groupe='+ id_groupe,


             dataType: 'json',

             success: function(json) {

               if (json['success']) { 
                location.reload();

              }

               }

             });
  });

в контроллер account добавляем function changeGroupe

который при отработке возвращает json success

Примерно так.

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

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


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

$('#input-customer-group').change(function() {
	var id_groupe = $("#input-customer-group").val();
$.ajax({

             url: 'index.php?route=account/account/changeGroupe',

             type: 'post',

             data: 'id_groupe='+ id_groupe,


             dataType: 'json',

             success: function(json) {

               if (json['success']) { 
                location.reload();

              }

               }

             });
  });

в контроллер account добавляем function changeGroupe

который при отработке возвращает json success

Примерно так.

 

Обидно, но с трудом представляю function changeGroupe... :wacko:

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


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

Обидно, но с трудом представляю function changeGroupe... 

	public function changeGroupe() {

		if(isset($this->request->post)) {

			$customer_group_id = $this->request->post['id_groupe'];

			$this->load->model('account/customer_group');

			$this->model_account_customer->editCustomerGroup($customer_group_id);

			$json['success'] = true;
		}

		$this->response->addHeader('Content-Type: application/json');
		$this->response->setOutput(json_encode($json));

	}

наверное как-то так...

только я не видел, что у Вас в модели customer, в методе editCustomerGroup

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


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

	public function changeGroupe() {

		if(isset($this->request->post)) {

			$customer_group_id = $this->request->post['id_groupe'];

			$this->load->model('account/customer_group');

			$this->model_account_customer->editCustomerGroup($customer_group_id);

			$json['success'] = true;
		}

		$this->response->addHeader('Content-Type: application/json');
		$this->response->setOutput(json_encode($json));

	}

наверное как-то так...

только я не видел, что у Вас в модели customer, в методе editCustomerGroup

Простите, совсем растерялся)

 

public function editCustomerGroup($data) {
$customer_id = $this->customer->getId();

$this->db->query("UPDATE " . DB_PREFIX . "customer SET customer_group_id = '" . $this->db->escape($data['customer_group_id']) . "' WHERE customer_id = '" . (int)$customer_id . "'");
}

 

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


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

ну так надо еще гдето запомнить выбранную группу, например в сессии или куке, а затем  инициализировать

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


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

тогда для продолжения с моим кодом, $data замените на $customer_group_id ну и естественно $data['customer_group_id'] на $customer_group_id

 

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


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

ну так надо еще гдето запомнить выбранную группу, например в сессии или куке, а затем  инициализировать

верно)

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


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

тогда для продолжения с моим кодом, $data замените на $customer_group_id ну и естественно $data['customer_group_id'] на $customer_group_id

 

 

Если вы об этом:

 

public function editCustomerGroup($customer_group_id ) {
		$customer_id = $this->customer->getId();
		
		$this->db->query("UPDATE " . DB_PREFIX . "customer SET customer_group_id = '" . $this->db->escape($customer_group_id) . "' WHERE customer_id = '" . (int)$customer_id . "'");
	}

То получаю ошибку:

PHP Warning:  mysqli::real_escape_string() expects parameter

 

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


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

@WellChuck смотрите, что у Вас передаётся в $customer_group_id

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


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

@WellChuck смотрите, что у Вас передаётся в $customer_group_id

<?php echo $customer_group_id; ?> вывел мне id группы

 

Это может создавать проблему(?):

if (is_array($this->config->get('config_customer_group_display'))) {
			$this->load->model('account/customer_group');

			$customer_groups = $this->model_account_customer_group->getCustomerGroups();

			foreach ($customer_groups as $customer_group) {
				if (in_array($customer_group['customer_group_id'], $this->config->get('config_customer_group_display'))) {
					$data['customer_groups'][] = $customer_group;
				}
			}
		}

 

Сразу не увидел, но при переключении группы, у меня после перезагрузки страницы высвечивает "0". После обновления страницы, всё нормально.

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

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


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

Смотрите что у Вас передаётся в Ajax при смене селектов

  • +1 1

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


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

Смотрите что у Вас передаётся в Ajax при смене селектов

 

6 минут назад, WellChuck сказал:

Сразу не увидел, но при переключении группы, у меня после перезагрузки страницы высвечивает "0". После обновления страницы, всё нормально.

 

Теперь при каждой попытке обновления пишет "Повторная отправка формы"...

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


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

Давайте дальше сами, я Вам почти всё дал по коду, темболее, что вот сейчас уже нужно смотреть на самом сайте, что передаются в post запросе Ajax.

Закомментируйте перезагрузку страницы и смотрите в консоль.

  • +1 2

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


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

Давайте дальше сами, я Вам почти всё дал по коду, темболее, что вот сейчас уже нужно смотреть на самом сайте, что передаются в post запросе Ajax.

Закомментируйте перезагрузку страницы и смотрите в консоль.

 

Принял)

Благодарю за помощь.

 

Можно закончить тему замечательной фразой - "Не умеешь в ajax, жми кнопки" :D

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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