Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


Recommended Posts

Здравствуйте,Я 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
Есть игдеи реализации?

Link to comment
Share on other sites


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

 

Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites


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

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

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

Link to comment
Share on other sites


Вот вам выпотому чторка к примеру по 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)

 

Link to comment
Share on other sites

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

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

  • +1 1
Link to comment
Share on other sites

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 аттрибутов, но у них то разные значения)

Link to comment
Share on other sites


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

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

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

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

Link to comment
Share on other sites


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

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

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

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

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

Link to comment
Share on other sites

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

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

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

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

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

Link to comment
Share on other sites


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

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') . "'

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

Link to comment
Share on other sites

К примеру

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

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

Link to comment
Share on other sites

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

К примеру

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

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

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

Link to comment
Share on other sites


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

Если я правильно понял, то нужно по 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`;

 

Edited by Gorman
  • +1 1
Link to comment
Share on other sites

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

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

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

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

 

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

 

Edited by Gorman
Link to comment
Share on other sites

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, за все надо платить или мулиться
Притом, что проект для обучения....

Edited by YanGus
Link to comment
Share on other sites


только не выкладывайте потом это чудо в модули хотя бы на этом форуме.

На буржуазном можно в качестве контрсанкций. Но мы тут не в чем не виноваты.

Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

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.