Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


WellChuck

Recommended Posts

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

 

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

 

OCstore 2.3

Змінено користувачем WellChuck
Надіслати
Поділитися на інших сайтах


  В 13.06.2018 в 09:10, WellChuck сказав:

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

 

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

 

OCstore 2.3

Expand  

 

Можно.

http://prntscr.com/jueh4s

http://prntscr.com/juehs2

Надіслати
Поділитися на інших сайтах


  В 13.06.2018 в 09:47, chukcha сказав:

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

Expand  

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

Надіслати
Поділитися на інших сайтах


  В 13.06.2018 в 10:07, WellChuck сказав:

 

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

Expand  

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

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

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

Надіслати
Поділитися на інших сайтах


  В 13.06.2018 в 10:03, WellChuck сказав:

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

Expand  

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

Надіслати
Поділитися на інших сайтах

  В 13.06.2018 в 10:10, krumax сказав:

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

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

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

Expand  

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

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
Надіслати
Поділитися на інших сайтах


  В 13.06.2018 в 11:43, WellChuck сказав:

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

Expand  

Всё верно

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

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

 

Змінено користувачем krumax
Надіслати
Поділитися на інших сайтах


  В 13.06.2018 в 12:06, krumax сказав:

Всё верно

Expand  

 

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

 

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

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
Надіслати
Поділитися на інших сайтах


  В 13.06.2018 в 12:28, 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

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

Expand  

 

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

Надіслати
Поділитися на інших сайтах


  В 13.06.2018 в 12:50, WellChuck сказав:

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

Expand  
	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

Надіслати
Поділитися на інших сайтах


  В 13.06.2018 в 13:00, 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

Expand  

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

 

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

 

Надіслати
Поділитися на інших сайтах


  В 13.06.2018 в 13:03, chukcha сказав:

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

Expand  

верно)

Надіслати
Поділитися на інших сайтах


  В 13.06.2018 в 13:05, krumax сказав:

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

 

Expand  

 

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

 

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

 

Надіслати
Поділитися на інших сайтах


  В 13.06.2018 в 13:19, krumax сказав:

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

Expand  

<?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
Надіслати
Поділитися на інших сайтах


  В 13.06.2018 в 13:26, krumax сказав:

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

Expand  

 

  В 13.06.2018 в 13:22, WellChuck сказав:

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

Expand  

 

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

Надіслати
Поділитися на інших сайтах


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

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

  • +1 2
Надіслати
Поділитися на інших сайтах


  В 13.06.2018 в 13:45, krumax сказав:

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

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

Expand  

 

Принял)

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

 

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

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.