Свой фильтр в mFilter2
Добрый день. Расскажите, пожалуйста, с какой целью используются методы getMyNewValues(array $fields, array $ids), buildMyNewFilter(array $values) и filterMyNew(array $requested, array $values, array $ids) при кастомизации mFilter2. Расковырял компонент, но так и не понял, что должен возвращать каждый из них. Хотя с последним ситуация более менее понятна. Странно, что в модели и сниппете не удается сделать var_dump. Очевидно, данные кешируются. Разъясните, как реализовать фильтр по произвольной таблице.
Комментарии: 10
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
В данный момент меня интересуют 2 вопроса.
1. Какое имя таблицы использовать при вызове фильтра, если фильтр работает с таблицей стороннего компонента?
2. Я собираюсь фильтровать товары по остаткам конкретной опции. Не станет ли система внутреннего кеширования помехой для отображения актуальной информации в режиме реального времени. Если станет, то как с этим бороться
modx.pro/howto/8360-filtering-users-using-mfilter2/ — вот пример работы со сторонней таблицей.
Кэш — нет, вряд ли, значение тех или иных полей цепляется непосредственно из бд. (или я не понял ваш вопрос) %)
По ссылке неполный пример. Там реализовано 2 метода из трёх. Если мой фильтр отличается только способом получения значений, я могу определить только метод getMyFilterValues. А для сборки и фильтрации будут использованы buildDefaultFilter и filterDefault. Верно?
К сожалению, пока нет компонента остатков под рукой, поэтому не могу проверить свои гипотезы.
У вас есть товары минишопа (в родной таблице) и данные по остаткам в таблице, созданной вами. Вы хотите подгрузить эти данные непосредственно в вызов mFilter2 к самим товарам, чтобы их можно было использовать в фильтрации. Для этого вам необходимо:
1. Подключить модель своей таблицы в MODX, чтобы можно было обращаться к ней стандартными методами
2. Подцепить ее в вызов mFilter2 через leftJoin и добавить в выборку select:
— после этого данные будут корректно цепляться и их можно будет обрабатывать в фильтрации, а также вы сможете в чанке применять плейсхолдер [[+remains]].
Я вроде бы научил сниппет правильно работать с параметрами where, limit, returnIds, sortby и другими. Сниппет прекрасно работает без mFilter2, в том числе и с pdoTools, а через mFilter не желает…
По логам я определил что он передаёт limit 0 независимо от числа, указанного в параметрах сниппета. Откуда он его берет?
1. подключить модель и все параметры вашего сниппета в вызов mFilter2
2. расширить метод фильтрации, чтобы mFilter2 научился фильтровать по вашим таблицам.
Этот вариант не загружает объекты в память и соответственно в разы быстрее и оптимальнее. Но видимо для mFilter2 прийдётся создавать модель таблицы…
Спасибо за ответ!