Jump to content
pasha2203

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

Recommended Posts

Posted (edited)

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

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

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

Edited by pasha2203

Share this post


Link to post
Share on other sites

контроллер:

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 } ?>

 

Share this post


Link to post
Share on other sites
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 группы покупателя!

 

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

Share this post


Link to post
Share on other sites

спасибо ребята очень толково рассказали, извиняюсь за поздний ответ

Share this post


Link to post
Share on other sites
В 13.05.2019 в 08:50, OCappLab сказал:

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

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

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

Restrict Entity - Access Customer Group

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

  • +1 1

Share this post


Link to post
Share on other sites
Posted (edited)
В 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.Данное условие не должно задаваться в товаре каждый раз при создании товара, необходимо просто единожды прописать в коде и на постоянной основе

Edited by pasha2203

Share this post


Link to post
Share on other sites
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.

 

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

 

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

Share this post


Link to post
Share on other sites
28 минут назад, OCappLab сказал:

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

 

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


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

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

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

 

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

 

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

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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
В 24.05.2019 в 15:28, OCappLab сказал:

Тогда

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


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

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

 

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

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

Share this post


Link to post
Share on other sites
Posted (edited)

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

Спойлер

<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>

 

 

Edited by pasha2203

Share this post


Link to post
Share on other sites
В 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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
17 часов назад, ampeklol сказал:

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

никак

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

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

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

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

 

Share this post


Link to post
Share on other sites
В 23.05.2019 в 09:13, chukcha сказал:

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

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

Restrict Entity - Access Customer Group

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

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

Share this post


Link to post
Share on other sites
14 минут назад, chukcha сказал:

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

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
53 минуты назад, chukcha сказал:

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

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

Share this post


Link to post
Share on other sites
В 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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

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.