Привязка сторонних таблиц к mFilter2

Добрый день, товарищи.
Возник вопрос, может подскажите.
Есть компонент остатков msProductRemains, который хранит данные в своей таблице.
Есть компонент mSearch2 со «сниппетом» mFilter2.
Задача:
На странице каталога вывести все товары с подключенной таблицей остатков, так что бы в каждой карточке товара было видно сколько штук осталось.
Можно конечно вызывать каждый раз в «чанке» товара «сниппет», идущий в комплекте msProductRemains, но что-то это очень сильно сказывается на производительности.
Поэтому хочется выбрать все эти остатки вместе за один заход через mFilter2

Вот часть вызова «сниппета»:
[[!mFilter2?
        &paginator=`pdoPage`
        &limit=`21`
        &parents=`[[*id]]`
        &where=`{"class_key":"msProduct"}`
        &element=`msProducts`
        &leftJoin=`{ "Remains":{ "class":"msprRemains","on":"msProduct.id = Remains.product_id" } }`
        &select=`{ "msProduct":"*","Remains":"SUM(Remains.remains) as remains" }`
....
Так вот при get запросе всё отлично выбирается и выводятся и товары и остатки, но когда нажимаешь по аjax -фильтрам, результат всегда пустой — пишет — Подходящих результатов не найдено. Потом нажимаешь обновить страницу и снова всё отлично выбирается и товары и остатки.

В консоль ошибок MODX при ajax-запросах сыплются такие ошибки:
Could not load class: msprRemains from mysql.msprremains.
[pdoTools] Error 42S22: Unknown column 'Remains.remains' in 'field list'
А при перезагрузке страницы — консоль чистая и запрос без проблем срабатывает со всеми подключёнными таблицами.

P.S
Решение найдено! Спасибо, Василию — автору mSearch2 и Ивану, за то, что направил на поиск решения.
И так:
Для решения задачи всего лишь не хватало подгрузить модель компонента, таблицы, которого вы подключаете в запрос. И делается это очень легко, у сниппета нужно указать параметр &loadModels=`модель_компонента`. Вот, собственно и всё!
Семён Кудрявцев
11 апреля 2017, 14:23
modx.pro
1
1 804
0

Комментарии: 3

Іван Клімчук
12 апреля 2017, 12:00
+1
Со сторонними таблицами работать можно, у меня на сайте он фильтрует объекты из таблицы другого компонента. Но я писал свои плагины и обработчики для этого. Есть пример реализации в документации docs.modx.pro/components/msearch2/extension/components/msearch2/the-extension/example-of-filtering-products, но в коде покопаться нужно. А касательно поддержки, то можно Василию написать напрямую и с ним договориться о помощи.
Виктор
08 июля 2017, 14:17
0
Подскажите, пожалуйста, как все-таки заработало.
Что в &loadModels=`` нужно вписать? Как потом в &filters=`` это вызвать?
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    3