Почему при фильтрации товаров в коллекции не пропадают ненужные характеристики фильтров на фронте?
Сейчас писал плагин по запросу клиента
https://support.webasyst.ru/fo...
Использовал хук products_collection.filter
Все товары отфильтровались замечательно, но, когда заходишь в категорию с отфильтрованными товарами, то там есть список характеристик товаров, по которым можно дополнительно фильтровать товары.

Так вот в этих фильтрах остались те характеристики, которые были только в отфильтрованных категориях. А почему? А как исправить?
21 ответ
В смысле почему? потому что фильтр строится на основании товаров коллекции. или под отфильтрованными ты подразумеваешь не попавшие в коллекцию?
какой результат ожидается?
если у нас в результате addWhere пропали все товары с определенной характеристикой, то зачем плказывать ее в списке фильтров на фронте?
А чем тебя filters() не устроил?
Используешь getFeatureValueIds()?
В отсутствии кода можно только гадать в чем у тебя проблема
Вот собственно все, что делается в коде, кроме всяких проверок.
Товары из категорий пропадают, а характеристики этих товаров не пропадают.
хук какой? данные фильтра получаешь в category.html из $filters?
Хук я написал в шапке темы. Я вообще даже не смотрел что там на фронте в category.html
Раз уж выводит все характеристики, значит так данные из коллекции передаются.
туплю (:
вообще выбирать товары по p.category_id не совсем верно т.к. товар может быть в нескольких категориях
по каким-то неведомым причинам в действии категории прописана выборка хар-к без фильтрации
+ все это еще завязано на настройки текущей категории вроде "Разрешить фильтрацию товаров"
т.ч. тебе придется сделать это "вручную" в шаблоне категории. Ну или автоматически сгенерировать категории-фильтры для всех возможных вариаций и подправить фильтр чтобы редиректил на них
в соседней теме как раз про это вопрос был как определить существующий алиас сджоиненной таблицы для верного запроса по категориям товара. но, посоветовавшись с заказчиком, решили, что это ему конкретно не нужно, но, если захочу публиковать плагин, то конечно так и сделаю. хотя вообще там этот джоин в коллекции выглядит довольно странно т.к. строчка с товаром одна, а к ней джоинится не известное количество строк с категориями. я пока не понял как это будет работать в реальной ситуации. но этот джоин уже есть в классе коллекции. не знаю ошибка это или я такой тупой, что не понимаю как работают такие джоины.
Я вообще не хочу иметь никаких взаимодействий с фронтом. Если не получается удалить лишние фильтры при помощи коллекции, то я считаю это багом, поэтому и создал этот топик.
Вообще класс коллекций - это какой-то ад. Мало того, что он создает 100500 запросов к базе, так еще и не отфильтровывает все, что нужно отфильтровать. Я пробовал запускать магазин с 900 тыс товаров на суперпуперском dedicated сервере хетзнера. Там, при вызове коллекции база вешает движок до таймаута в 30 секунд. В итоге пришлось свернуть этот проект.
Надо как-то думать в сторону асинхронной загрузки фильтров, но темы дизайна как раз дергают $wa->shop->features($products); где надо и где не надо. А это самый тяжелый запрос.
так ты сам задать можешь псевдоним таблицы:
но не той таблицы, которая уже вшита в класс коллекции. если я сджоиню shop_category_products, то появится еще один джоин с ней же. а вот по поводу алиаса этой таблицы я не уверен, что он всегда будет cp1.
всегда можно создать класс наследующий productCollection заменив им исходный исходный класс.
чем ты недоволен)))
экшен категории специально передает в шаблон не фильтрованный список хар-к который базируется на настройках категории.
ой, всё! :)
само по себе железо работать не будет, его нужно настраивать. Универсальное решение:
1. изменяем тип таблиц на innodb и увеличиваем буферизацию mysql
2.включаем кэширование по максимуму: сервер - модуль pagespeed , opcache, smarty и клиент- http заголовки
Там сисадмин путевый настраивал все по феншую. Но сервер не вытянул нагрузку.
в результате addWhere пропали все товары с определенной характеристикой.
Точнее наверно пропали все товары с определенной категории, а вот фильтры от пропавших товаров остались.
Вопрос такой, как сделать так, если мы в основной категории например "Кондиционеры" хотим исключить показ товаров из подкатегории "Комплектующие" убрать так же показ фильтров в категории "Кондиционеры" для товаров из подкатегории "Комплектующие"
переместить категорию в корень)
Нет)
Вариантов больше нет?))
решение очевидное: пишите плагин с обработчиком события products_collection.filter который отсеивает товары категории + хэлпер-метод для удаления хар-к категории из $filters в category,html