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

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


WellChuck

Recommended Posts

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

 

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

 

OCstore 2.3

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


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

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

 

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

 

OCstore 2.3

 

Можно.

http://prntscr.com/jueh4s

http://prntscr.com/juehs2

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


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

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

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

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


Только что, 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

 

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


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


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

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

 

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

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

 

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

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


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

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

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


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

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

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

 

Принял)

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

 

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

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


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

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

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

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

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

Вхід

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

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

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

×
×
  • Створити...

Important Information

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