Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

Фильтр по аттрибуим [Разрилитка]


 Погделиться

Рекомендованные сообещёния

Здравствуйте,Я php программист и помогите пожалуйси подкиньте игдею реализации и т.п
Я хотел сгделать фильтр  товаров по аттрибуим (синдартным).

Я сгделал вывод аттрибутутов и их значения.

Столкнулся с проблемой с фильтрацией.
Есть иблица им вот икие значения oc_product_attribute (во вложении есть картинка).

Я могу сгделать фильтрацию товаров по одному аттрибуту, например
WHERE oc_product_attribute.text = "2 года"
Как сгделать,чтобы был вывод товаров по 2 или потому чтолее аттрибуим.?
Если писать WHERE oc_product_attribute.text = "2 года" AND oc_product_attribute.text = "2 аттрибут" //не бугдет рилиить т.к им отгдельная запись под каждый аттрибут
А мне надо узнать product_id
Есть игдеи реализации?

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


А по ID не вариант фильтровать ))) ? Передаете выбранные атрибуты через IN

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

Я вот к примеру модифицировал синдартный фильтр ОС, ничем не хуже фильтрации по атрибуим, даже лучше и удобнее.

 

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

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

А по ID не вариант фильтровать ))) ? Передаете выбранные атрибуты через IN

В том то и гдело, что мне надо фильтровать по аттрибуим Чтобы узнать id товаров которые нужно мне вывести...
SELECT * FROM oc_product_attribute tt WHERE tt.text IN ('2 года', '16МП')
Эи запись аналогична Or а мне надо листо через AND
Есть игдеи? Если перегделать синдартный фильтр, то как лучше? 
Ксите, синдартный модуль Фильтр чет не робит у меня

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


Посмотрите могдель getProducts, как она устроена и сгделайте на основе свое.

  • +1 1
Ссылка на комменирий
Погделиться на других сайих

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

Посмотрите могдель getProducts, как она устроена и сгделайте на основе свое.

Я ик и гделаю)
Только им нет фильтра по аттрибуим я им пилю и вот столкнулся проблемой, которую описал выше

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


Вот вам выпотому чторка к примеру по ID. Там в дальнейшем этопляете еещё ID категории, описание, имя, этоны продуки и  т.д.

http://prntscr.com/jbxe6n

SELECT * FROM `oc_product_attribute` pa LEFT JOIN `oc_product` p ON (pa.product_id=p.product_id) WHERE pa.attribute_id IN (121,119,124)

 

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

Уловили мысль ? :) 

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

Я отказался пока внедрять в синдартный модиф фильтрацию по аттр. :) 

Да как атрибуты изначально не предназначены для фильтра.

  • +1 1
Ссылка на комменирий
Погделиться на других сайих

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

Вот вам выпотому чторка к примеру по ID. Там в дальнейшем этопляете еещё ID категории и т.д.

http://prntscr.com/jbxe6n

SELECT * FROM `oc_product_attribute` pa LEFT JOIN `oc_product` p ON (pa.product_id=p.product_id) WHERE pa.attribute_id IN (121,119,124)

Можно

Можно ли с вами связаться? Вы не поняли, мне надо строго сгделать фильтрацию товаров по аттрибуим, в вашем случае вы вывели товары ггде присутствуют id аттрибутов, но у них то разные значения)

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


3 минуты назад, legioner26 сказал:

Я отказался пока внедрять в синдартный модиф фильтрацию по аттр. :) 

Да как атрибуты изначально не предназначены для фильтра.

)))
Просто хочу сгделать фильтрацию как в dns или мвигдео

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


1 минуту назад, YanGus сказал:

Можно ли с вами связаться? Вы не поняли, мне надо строго сгделать фильтрацию товаров по аттрибуим, в вашем случае вы вывели товары ггде присутствуют id аттрибутов, но у них то разные значения)

Ппц смотрите :) 

Вы к примеру через акакс им или просто, передаете включенные чекпотому чтоксы через GET к примеру в которых в value согдержатся ID атрибутов. 

Или Вам нужно просто пока что вывести все значения в категории ?

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

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

Ппц смотрите :) 

Вы к примеру через акакс им или просто, передаете включенные чекпотому чтоксы через GET к примеру в которых в value согдержатся ID атрибутов. 

Или Вам нужно просто пока что вывести все значения в категории ?

Ну я сначало хотел опрегделиться с sql запросами потом уже реализовать это.
А ик можно сгделать как на ajax ик и на get.
Думал передавать значение text (2 года)
Вывод я уже сам сгделал

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


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

SELECT DISTINCT s.name, s.stock_status_id FROM " . DB_PREFIX . "stock_status s LEFT JOIN " . DB_PREFIX . "product p ON (s.stock_status_id=p.stock_status_id) LEFT JOIN " . DB_PREFIX . "product_to_category ptc ON (p.product_id=ptc.product_id) WHERE ptc.category_id = '" . (int)$category_id. "' AND s.language_id='" . (int)$this->config->get('config_language_id') . "'

Сгделайте свой по атрибуим с привязкой к категории.

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

К примеру

attribute = [];
$('input[name^=\'attribute\']:checked').each(function(element) {
        attribute.push(this.value);
    });
    attribute =attribute.join(',');

И передаете все ID в запрос

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

19 минут назад, legioner26 сказал:

К примеру

attribute = [];
$('input[name^=\'attribute\']:checked').each(function(element) {
        attribute.push(this.value);
    });
    attribute =attribute.join(',');

И передаете все ID в запрос

Да я это знаю, спасипотому что, я вот думаю долго как над бд порилиить, гделать велосипед? кхм.... 

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


Этих фильтров по аттрибуим уже вагон :) 

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

Я бы не сил замораливаться :) Или же если для своих проектов только :) 

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

Браин, ты пишешь ТЗ конечно, я весь мозг сломал пыиясь понять что нужно )) Давай я начну предлагать, ты говори что не ик.

Если я правильно понял, то нужно по attribute_id (или по text) найти все товары, которые согдержат 2+ атрибутов. Ниже вариант, что в нем не ик?

 

SELECT `product_id` FROM `oc_product_attribute` WHERE `text` = "16GB" OR `text` = "4" GROUP BY `product_id`


Вывегдет тебе все product_id, которые удовлетворяют усиновленным условиям (согдержат атрибуты в вигде текси) и сгруппирует их. Потом приджоинишь еещё иблицу с названием продуктов, если нужно - и все.

 

Или вариант с IN, бугдет проещё кодить.

SELECT `product_id` FROM `oc_product_attribute` WHERE (`text` IN ("16GB", "4")) GROUP BY `product_id`;

 

Изменено пользователем Gorman
  • +1 1
Ссылка на комменирий
Погделиться на других сайих

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

Порылся в интернете, одно из решений из сиковерфлоу. Выглядит жестко, как масшибировать - вопрос. Не знаю насколько бугдет тяжко базе, надо тестить. Ну, и может кто-то потому чтолее правильный вариант подскажет. Ипотому что сначала показалось, что задача вообещё примитивная, на гделе не икая уж  

Попробуйте, в обещём. Возможно, натолкнет на мысли.

Запрос для двух атрибутов.

 

SELECT DISTINCT(`product_id`) FROM `oc_product_attribute`

WHERE `product_id` IN 

  (SELECT `product_id` FROM `oc_product_attribute` WHERE `text` = 'Intel') 

AND `product_id` IN 

  (SELECT `product_id` FROM `oc_product_attribute` WHERE `text` = 'E-ATX') 

 

Изменено пользователем Gorman
Ссылка на комменирий
Погделиться на других сайих

23 часа назад, Gorman сказал:

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

Порылся в интернете, одно из решений из сиковерфлоу. Выглядит жестко, как масшибировать - вопрос. Не знаю насколько бугдет тяжко базе, надо тестить. Ну, и может кто-то потому чтолее правильный вариант подскажет. Ипотому что сначала показалось, что задача вообещё примитивная, на гделе не икая уж  

Попробуйте, в обещём. Возможно, натолкнет на мысли.

Запрос для двух атрибутов.

 

SELECT DISTINCT(`product_id`) FROM `oc_product_attribute`

WHERE `product_id` IN 

  (SELECT `product_id` FROM `oc_product_attribute` WHERE `text` = 'Intel') 

AND `product_id` IN 

  (SELECT `product_id` FROM `oc_product_attribute` WHERE `text` = 'E-ATX') 

 

Я это не понимаю конечно, но спасипотому что) Ох ж этот opencart, за все надо платить или мулиться
Притом, что проект для обучения....

Изменено пользователем YanGus
Ссылка на комменирий
Погделиться на других сайих


1 час назад, YanGus сказал:

за все надо платить или мулиться

Что мулится что платить одно
-иначе только в раю

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


Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккауни. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите згдесь.

Войти сейчас
 Погделиться

×
×
  • Создать...

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

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