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

Выбор Группы пользователей в шапке сайта

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

Здравствуйте! Подскажите пожалуйста как реализовать выбор Группы пользователей в шапке сайта. На примере как реализовано выбор валюты.

 

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


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

Версия какая стора? Для каких целей?

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


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

ocStore 2.3.0.2.3

Для того чтобы пользователь мог выбрать группу пользователей и видеть свои цены.

 

 

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


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

Сделать копии файлов model/currency.php, controller/currency.php, view/theme/*/common/currency.tpl, language/russian/currency.php, system/library/currency.php В индексном файле добавить 

$registry->set('customer_group', new CustonerGroup($registry));

Заменить в названии классов, Currency на UserGroup, переименовать файлы. В модели описать выборку из БД групп, в контроллере сделать вывод этой выборки в массив и сделать вывод этого в шаблоне tpl. В файле system/library/currency.php задавать куки уже для групп.. Поверхностно. 

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


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

 

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


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

Сделать копии файлов model/currency.php, controller/currency.php, view/theme/*/common/currency.tpl, language/russian/currency.php, system/library/currency.php В индексном файле добавить 


$registry->set('customer_group', new CustonerGroup($registry));

Заменить в названии классов, Currency на UserGroup, переименовать файлы. В модели описать выборку из БД групп, в контроллере сделать вывод этой выборки в массив и сделать вывод этого в шаблоне tpl. В файле system/library/currency.php задавать куки уже для групп.. Поверхностно. 

Сделал как Вы посоветовали. Не нашел только файла system/library/currency.php В итоге в шапке появился выбор. Но есть несколько проблем.

1. Выдает одну ошибку Notice: Undefined index: customer. Ругается на эту строчку:

$data['name'] = $this->session->data['customer'];

2. Не выводит рядом с формой текущую группу. Наверно не понимает такое условие:

<?php if ($customer['name'] == $name) { ?>

3. Я так понимаю не выбирает и не меняет группу.

 

Вот что у меня сейчас в файлах: 

 

Контроллер

Спойлер

<?php
class ControllerCommonCustomer extends Controller {
	public function index() {
		$this->load->language('common/customer');

		$data['text_customer'] = $this->language->get('text_customer');

		$data['action'] = $this->url->link('common/customer/customer', '', isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1')));

		$data['name'] = $this->session->data['customer'];

		$this->load->model('localisation/customer');

		$data['currencies'] = array();

		$results = $this->model_localisation_customer->getCurrencies();

		foreach ($results as $result) {
			if ($result['name']) {
				$data['currencies'][] = array(
					'name'         => $result['name']
				);
			}
		}

		if (!isset($this->request->get['route'])) {
			$data['redirect'] = $this->url->link('common/home');
		} else {
			$url_data = $this->request->get;

			unset($url_data['_route_']);

			$route = $url_data['route'];

			unset($url_data['route']);

			$url = '';

			if ($url_data) {
				$url = '&' . urldecode(http_build_query($url_data, '', '&'));
			}

			$data['redirect'] = $this->url->link($route, $url, isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1')));
		}

		return $this->load->view('common/customer', $data);
	}

	public function customer() {
		if (isset($this->request->post['name'])) {
			$this->session->data['customer'] = $this->request->post['name'];
		
			unset($this->session->data['shipping_method']);
			unset($this->session->data['shipping_methods']);
		}
		
		if (isset($this->request->post['redirect'])) {
			$this->response->redirect($this->request->post['redirect']);
		} else {
			$this->response->redirect($this->url->link('common/home'));
		}
	}
}

 

 

Модель

Спойлер

<?php
class ModelLocalisationCustomer extends Model {
	public function getCustomerByName($customer) {
		$query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "customer_group_description WHERE name = '" . $this->db->escape($customer) . "'");

		return $query->row;
	}

	public function getCurrencies() {
		$customer_data = $this->cache->get('customer');

		if (!$customer_data) {
			$customer_data = array();

			$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer_group_description ORDER BY name ASC");

			foreach ($query->rows as $result) {
				$customer_data[$result['name']] = array(
					'customer_group_id'   => $result['customer_group_id'],
					'language_id'         => $result['language_id'],
					'name'          => $result['name'],
					'description'   => $result['description']
				);
			}

			$this->cache->set('customer', $customer_data);
		}

		return $customer_data;
	}
}

 

 

Темплейт

Спойлер

<?php if (count($currencies) > 1) { ?>
<div class="pull-left">
<form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-customer">
  <div class="btn-group">
    <button class="btn btn-link dropdown-toggle" data-toggle="dropdown">
	<?php foreach ($currencies as $customer) { ?>
    <?php if ($customer['name'] == $name) { ?>
    <strong><?php echo $customer['name']; ?></strong>
    <?php } ?>
	<?php } ?>
    <span class="hidden-xs hidden-sm hidden-md"><?php echo $text_customer; ?></span> <i class="fa fa-caret-down"></i></button>
    <ul class="dropdown-menu">
      <?php foreach ($currencies as $customer) { ?>
      <li><button class="customer-select btn btn-link btn-block" type="button" name="<?php echo $customer['name']; ?>"><?php echo $customer['name']; ?></button></li>
      <?php } ?>
    </ul>
  </div>
  <input type="hidden" name="name" value="" />
  <input type="hidden" name="redirect" value="<?php echo $redirect; ?>" />
</form>
</div>
<?php } ?>

 

 

Подскажите куда копать! Спасибо!

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

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


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

Часть проблем ушла при помощи Ulv.

Теперь выбирается Группа и сохраняется при переходах по страницам, но цены на сайте не меняются, хотя при выборе группы идет обновление страницы. 

На данный момент так:

Контроллер

Спойлер

<?php
class ControllerCommonCustomer extends Controller {
	public function index() {
		$this->load->language('common/customer');

		$data['text_customer'] = $this->language->get('text_customer');

		$data['action'] = $this->url->link('common/customer/customer', '', isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1')));

		$this->load->model('localisation/customer');
		//var_dump($this->config->get('customer_group_default'));
		if(empty($this->session->data['customer_group_id'])){
			$data['code'] = $this->session->data['customer_group_id'] = $this->config->get('config_customer_group_id');
		}else{
			$data['code'] = $this->session->data['customer_group_id'];
		}

		//var_dump($this->config->get('customer_group_default'));


		$data['customer_groups'] = array();

		$results = $this->model_localisation_customer->getCurrencies();

		foreach ($results as $result) {
			if ($result['name']) {
				$data['customer_groups'][] = array(
					'id' => $result['customer_group_id'],
					'name'         => $result['name']
				);
			}
		}

		if (!isset($this->request->get['route'])) {
			$data['redirect'] = $this->url->link('common/home');
		} else {
			$url_data = $this->request->get;

			unset($url_data['_route_']);

			$route = $url_data['route'];

			unset($url_data['route']);

			$url = '';

			if ($url_data) {
				$url = '&' . urldecode(http_build_query($url_data, '', '&'));
			}

			$data['redirect'] = $this->url->link($route, $url, isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1')));
		}

		return $this->load->view('common/customer', $data);
	}

	public function customer() {
		if (isset($this->request->post['code'])) {
			$this->session->data['customer_group_id'] = $this->request->post['code'];
		}
		
		if (isset($this->request->post['redirect'])) {
			$this->response->redirect($this->request->post['redirect']);
		} else {
			$this->response->redirect($this->url->link('common/home'));
		}
	}
}

 

Модель

Спойлер

<?php
class ModelLocalisationCustomer extends Model {
	public function getCustomerByName($customer) {
		$query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "customer_group_description WHERE name = '" . $this->db->escape($customer) . "'");

		return $query->row;
	}

	public function getCurrencies() {
		$customer_data = $this->cache->get('customer');

		if (!$customer_data) {
			$customer_data = array();

			$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer_group_description ORDER BY name ASC");

			foreach ($query->rows as $result) {
				$customer_data[$result['name']] = array(
					'customer_group_id'   => $result['customer_group_id'],
					'language_id'         => $result['language_id'],
					'name'          => $result['name'],
					'description'   => $result['description']
				);
			}

			$this->cache->set('customer', $customer_data);
		}

		return $customer_data;
	}
}

 

Темплейт

Спойлер

<?php if (count($customer_groups) > 1) { ?>
<div class="pull-left">
<form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-customer">
  <div class="btn-group">
    <button class="btn btn-link dropdown-toggle" data-toggle="dropdown">
	<?php foreach ($customer_groups as $customer) { ?>
    <?php if ($customer['id'] == $code) { ?>
    <strong><?php echo $customer['name']; ?></strong>
    <?php } ?>
	<?php } ?>
    <span class="hidden-xs hidden-sm hidden-md"><?php echo $text_customer; ?></span> <i class="fa fa-caret-down"></i></button>
    <ul class="dropdown-menu">
      <?php foreach ($customer_groups as $customer) { ?>
      <li><button class="customer-select btn btn-link btn-block" type="button" name="<?php echo $customer['id']; ?>"><?php echo $customer['name']; ?></button></li>
      <?php } ?>
    </ul>
  </div>
  <input type="hidden" name="code" value="" />
  <input type="hidden" name="redirect" value="<?php echo $redirect; ?>" />
</form>
</div>
<?php } ?>

 

 

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

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


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

@max1985 видимо я зря Вам выше дал ссылку на топик, где пошагово видно что и где нужно делать.

Группа покупателя хранится в БД в таблице _customer

5Lhw6ZN7SXOmmNLIHeFJfw.png

именно туда и нужно писать выбранное покупателем id группы.

Ваш код этого не делает и соответственно группа у покупателя осталась прежней.

 

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

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


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

@max1985 видимо я зря Вам выше дал ссылку на топик, где пошагово видно что и где нужно делать.

Группа покупателя хранится в БД в таблице _customer

5Lhw6ZN7SXOmmNLIHeFJfw.png

именно туда и нужно писать выбранное покупателем id группы.

Ваш код этого не делает и соответственно группа у покупателя осталась прежней.

 

Спасибо! Да я видел эту тему, но там все так запутано решыл сделать с нуля на основе выбора валюты.

Я так понимаю в Моделе надо привязываться к таблице customer, и связывать ее с customer_group_description для вывода имени группы?

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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