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

Скрывать товары от группы покупателей по условию


Recommended Posts

Всем доброго времени суток. Подскажите пожалуйста или модуль или решение где возможно посмотреть. Есть много товаров которые частично необходимо скрыть от группы покупателей, т оесть к примеру по такому условию:

Если в поле sku у товара написано "1" то товар видят все группы покупателей
Если в поле sku у товара написано "2" то товар видит только определенная группа.

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

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


контроллер:

if ($this->customer->isLogged()) {
    $data['customer_group_id'] = $this->customer->getGroupId();
} else {
    $data['customer_group_id'] = '');
}

 

шаблон:

<?php foreach ($products as $product) { ?>
    <?php if ($customer_group_id == 2) && ($product['sku'] == 2) { ?>
        <div class="product-layout product-list col-xs-12">
            // show product
        </div>
    <?php } ?>
<?php } ?>

 

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

8 часов назад, pasha2203 сказал:

Всем доброго времени суток. Подскажите пожалуйста или модуль или решение где возможно посмотреть. Есть много товаров которые частично необходимо скрыть от группы покупателей, т оесть к примеру по такому условию:

Если в поле sku у товара написано "1" то товар видят все группы покупателей
Если в поле sku у товара написано "2" то товар видит только определенная группа.

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

В данном случае. это лучше всего реализовать в запросе.

Насколько я понял поле sku - это у Вас id группы пользователя, правильно?

Если да, тогда лучше всего в запросе это использовать.

 

Идем в файл:

catalog/model/catalog/product.php

Ищем в функции getProducts, getTotalProducts проверку:

if (!empty($data['filter_manufacturer_id'])) {

и перед ней добавляем

$sql .= " AND p.sku = '". (int)$this->customer->getGroupId() ."'";

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

 

В данном решении поле SKU должно ОБЯЗАТЕЛЬНО иметь id группы покупателя!

 

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

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

  • 2 weeks later...
В 13.05.2019 в 08:50, OCappLab сказал:

p.sku = '". (int)$this->customer->getGroupId() ."'";

подразумевает что товар принадлежит только одной группе

У меня есть модуль
рабочее название

Restrict Entity - Access Customer Group

позволяет привязывать  товары и категории различным группам
 

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

В 13.05.2019 в 08:50, OCappLab сказал:

В данном случае. это лучше всего реализовать в запросе.

Насколько я понял поле sku - это у Вас id группы пользователя, правильно?

Если да, тогда лучше всего в запросе это использовать.

 

Идем в файл:

catalog/model/catalog/product.php

Ищем в функции getProducts, getTotalProducts проверку:


if (!empty($data['filter_manufacturer_id'])) {

и перед ней добавляем


$sql .= " AND p.sku = '". (int)$this->customer->getGroupId() ."'";

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

 

В данном решении поле SKU должно ОБЯЗАТЕЛЬНО иметь id группы покупателя!

 

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

нет в sku будет всего два параметра к примеру 12345 и 54321,так вот если покупатель принадлежит к группе "опт" то он видит товар с sku 12345 и 54321, если покупатель принадлежит к группе розница то он видит товар у которых sku 54321.Данное условие не должно задаваться в товаре каждый раз при создании товара, необходимо просто единожды прописать в коде и на постоянной основе

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


32 минуты назад, pasha2203 сказал:

нет в sku будет всего два параметра к примеру 12345 и 54321,так вот если покупатель принадлежит к группе "опт" то он видит товар с sku 12345 и 54321, если покупатель принадлежит к группе розница то он видит товар у которых sku 54321.Данное условие не должно задаваться в товаре каждый раз при создании товара, необходимо просто единожды прописать в коде и на постоянной основе

Судя из этого, нужно условие при выборке чуть изменить. Я предполагал, что SKU это и будет ID группы покупателя.

 

Получиться что-то типо такого:

if ($this->customer->getGroupId() == 2) {
	$sql .= " AND p.sku = '54321'";
}

Где 2 - это ID группы оптовиков.

Тоесть, если будет оптовик смотреть товары, тогда у него будут отображаться только товары где SKU имеет значение 54321.

 

Только в этом моменте есть минус. Так как пока пользователь не авторизируется, по-умолчанию он считается розничным покупателем и ему будут доступны все товары.

 

Примерно я понял Вашу логику. У Вас есть товары, какие можно купить как оптом, так и в розницу. Но не все розничные товары Вы продаете оптом. Тогда, думаю, проблемы не будет в том, что не авторизированные оптовики будут видеть весь ассортимент товара. 

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

28 минут назад, OCappLab сказал:

Судя из этого, нужно условие при выборке чуть изменить. Я предполагал, что SKU это и будет ID группы покупателя.

 

Получиться что-то типо такого:


if ($this->customer->getGroupId() == 2) {
	$sql .= " AND p.sku = '54321'";
}

Где 2 - это ID группы оптовиков.

Тоесть, если будет оптовик смотреть товары, тогда у него будут отображаться только товары где SKU имеет значение 54321.

 

Только в этом моменте есть минус. Так как пока пользователь не авторизируется, по-умолчанию он считается розничным покупателем и ему будут доступны все товары.

 

Примерно я понял Вашу логику. У Вас есть товары, какие можно купить как оптом, так и в розницу. Но не все розничные товары Вы продаете оптом. Тогда, думаю, проблемы не будет в том, что не авторизированные оптовики будут видеть весь ассортимент товара. 

немного не так опт должен видеть весь товар,а вот не авторизированне пользователи и розниа должн видетьть только часть товара

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


20 минут назад, pasha2203 сказал:

немного не так опт должен видеть весь товар,а вот не авторизированне пользователи и розниа должн видетьть только часть товара

Тогда

51 минуту назад, OCappLab сказал:

Где 2 - это ID группы оптовиков.

Группа розницы. И, на всякий случай, добавить проверку на 0. и получится

if ($this->customer->getGroupId() == 0 or $this->customer->getGroupId() == 1) {
	$sql .= " AND p.sku = '12345'";
}

Где 1 - это ID группы по-умолчанию.

 

Это конечно костыль. Можно сделать в виде доп настройки в настройке системы. Чтоб была настройка какие группы что видят и что не видят.

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

В 24.05.2019 в 15:28, OCappLab сказал:

Тогда

Группа розницы. И, на всякий случай, добавить проверку на 0. и получится


if ($this->customer->getGroupId() == 0 or $this->customer->getGroupId() == 1) {
	$sql .= " AND p.sku = '12345'";
}

Где 1 - это ID группы по-умолчанию.

 

Это конечно костыль. Можно сделать в виде доп настройки в настройке системы. Чтоб была настройка какие группы что видят и что не видят.

можите подсказать как такое реализовать если вам конечно не сложно

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


Спасибо и так уже много подсказали.не буду наглеть.Ребята подскажите где ошибка в коде почему то не прописуються изменения в модели при установке модификатора

Спойлер

<modification>
	<name>JGN</name>
	<code>product</code>
	<version>1</version>
	<author>tet.ru</author>
	<link>http://tet.ru</link>
	
	<file path="catalog/model/catalog/product.php">
        <operation error="skip">
            <search index="0"><![CDATA[if (!empty($data['filter_category_id']))]]></search>
            <add position="before"><![CDATA[
				if ($this->customer->getGroupId() == 0 or $this->customer->getGroupId() == 1) {
	            $sql .= " AND p.upc = 'Опт'";
                }				
			]]></add>
        </operation>	
	<operation error="skip">
            <search index="1"><![CDATA[if (!empty($data['filter_category_id']))]]></search>
            <add position="before"><![CDATA[
				if ($this->customer->getGroupId() == 0 or $this->customer->getGroupId() == 1) {
	            $sql .= " AND p.upc = 'Опт'";
                }				
			]]></add>
        </operation>	
	</file>	
</modification>

 

 

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


В 26.05.2019 в 00:20, pasha2203 сказал:

Спасибо и так уже много подсказали.не буду наглеть.Ребята подскажите где ошибка в коде почему то не прописуються изменения в модели при установке модификатора

  Скрыть контент


<modification>
	<name>JGN</name>
	<code>product</code>
	<version>1</version>
	<author>tet.ru</author>
	<link>http://tet.ru</link>
	
	<file path="catalog/model/catalog/product.php">
        <operation error="skip">
            <search index="0"><![CDATA[if (!empty($data['filter_category_id']))]]></search>
            <add position="before"><![CDATA[
				if ($this->customer->getGroupId() == 0 or $this->customer->getGroupId() == 1) {
	            $sql .= " AND p.upc = 'Опт'";
                }				
			]]></add>
        </operation>	
	<operation error="skip">
            <search index="1"><![CDATA[if (!empty($data['filter_category_id']))]]></search>
            <add position="before"><![CDATA[
				if ($this->customer->getGroupId() == 0 or $this->customer->getGroupId() == 1) {
	            $sql .= " AND p.upc = 'Опт'";
                }				
			]]></add>
        </operation>	
	</file>	
</modification>

 

 

Вот так попробуйте:

Спойлер

<?xml version="1.0" encoding="utf-8"?>
<modification>
	<code>JGN</code>
	<name>For pasha2203</name>
	<version>1.0.0</version>
	<author>OCappLab</author>
	<link>https://ocapplab.com/</link>
	<file path="catalog/model/catalog/product.php">
		<operation error="skip">
			<search><![CDATA[if (!empty($data['filter_manufacturer_id'])) {]]></search>
			<add position="before"><![CDATA[
	        if ($this->customer->getGroupId() == 0 or $this->customer->getGroupId() == 1) {
            	$sql .= " AND p.upc = 'Опт'";
            }
			]]></add>
    	</operation>
	</file>
</modification>

 

Если не было изменений в коде будет работать.

 

P.S. проверял на OCstore 2.3

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

Здравствуйте, тоже интересная тема.

я кое что не допонял

у меня есть две группы покупателей

в у товара в поле upt будет писать Опт

но как прикрепить к группе это слово, подскажите пожалуйста ?

установил последнее сообщение в виде  дополнение от OCappLab 

но чот я не могу понять как будет слово Опт подхватывать группу ?

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


17 часов назад, ampeklol сказал:

но чот я не могу понять как будет слово Опт подхватывать группу ?

никак

17 часов назад, ampeklol сказал:

установил последнее сообщение в виде  дополнение от OCappLab 

вы понимаете что там происходит?

// если идентификатор группы пользователя равен 0 или 1
if ($this->customer->getGroupId() == 0 or $this->customer->getGroupId() == 1) {
	// в запрос к базе добаляем условие, чтобы выбрались только те товары у который upc = 'Опт'
	$sql .= " AND p.upc = 'Опт'";
}

 

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

В 23.05.2019 в 09:13, chukcha сказал:

подразумевает что товар принадлежит только одной группе

У меня есть модуль
рабочее название

Restrict Entity - Access Customer Group

позволяет привязывать  товары и категории различным группам
 

все давно есть

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

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

все давно есть

этот вариант не интересен, так как товары создаються автоматически и каждый день заходить в модуль и прикреплять товары не вариант.

 

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


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

а прописывать в импорте легче?

используем парсер который работает по крону и прописать поле upc=Опт  проще простого.

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


В 28.05.2019 в 13:05, OCappLab сказал:

Вот так попробуйте:

  Скрыть контент


<?xml version="1.0" encoding="utf-8"?>
<modification>
	<code>JGN</code>
	<name>For pasha2203</name>
	<version>1.0.0</version>
	<author>OCappLab</author>
	<link>https://ocapplab.com/</link>
	<file path="catalog/model/catalog/product.php">
		<operation error="skip">
			<search><![CDATA[if (!empty($data['filter_manufacturer_id'])) {]]></search>
			<add position="before"><![CDATA[
	        if ($this->customer->getGroupId() == 0 or $this->customer->getGroupId() == 1) {
            	$sql .= " AND p.upc = 'Опт'";
            }
			]]></add>
    	</operation>
	</file>
</modification>

 

Если не было изменений в коде будет работать.

 

P.S. проверял на OCstore 2.3

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

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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