Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Смена группы покупателя


WellChuck
 Поделиться

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

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

 

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

 

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 сказал:

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

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

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

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