Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

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


WellChuck
 Share

Recommended Posts

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

 

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

 

OCstore 2.3

Edited by WellChuck
Link to comment
Share on other sites


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

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

 

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

 

OCstore 2.3

 

Можно.

http://prntscr.com/jueh4s

http://prntscr.com/juehs2

Link to comment
Share on other sites


15 минут назад, chukcha сказал:

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

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

Link to comment
Share on other sites


Только что, WellChuck сказал:

 

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

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

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

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

Link to comment
Share on other sites


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

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

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

Link to comment
Share on other sites

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?

Edited by WellChuck
Link to comment
Share on other sites


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

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

Всё верно

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

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

 

Edited by krumax
Link to comment
Share on other sites


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>

 

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

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

Edited by WellChuck
Link to comment
Share on other sites


$('#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

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

Edited by krumax
  • +1 1
Link to comment
Share on other sites


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:

Link to comment
Share on other sites


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

Link to comment
Share on other sites


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 . "'");
}

 

Link to comment
Share on other sites


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

 

Link to comment
Share on other sites


2 минуты назад, chukcha сказал:

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

верно)

Link to comment
Share on other sites


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

 

Link to comment
Share on other sites


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". После обновления страницы, всё нормально.

Edited by WellChuck
Link to comment
Share on other sites


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

  • +1 1
Link to comment
Share on other sites


2 минуты назад, krumax сказал:

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

 

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

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

 

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

Link to comment
Share on other sites


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

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

  • +1 2
Link to comment
Share on other sites


5 минут назад, krumax сказал:

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

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

 

Принял)

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

 

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

Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

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.