Настройка своих фильтров в mFilter2
Доброго времени суток!
Возникла нужда сделать свой тип фильтра для товаров…
В админке два поля: покрытие, цвет.
Для каждого товара может быть только одно покрытие и один цвет.
В создании поля не было ничего сложного, трудности появились именно при формировании фильтра:
Цвета должны группироваться по покрытию, то есть покрытие 1 — список цветов, покрытие 2 — список цветов.
Внимательно прочитал
docs.modx.pro/components/msearch2/extension/components/msearch2/the-extension/example-of-filtering-products
docs.modx.pro/components/msearch2/extension/components/msearch2/the-extension/filtering-methods
Подключил кастомный файл фильтров, написал свои функцииget, build, filter, но с некоторыми проблемами не смог разобраться:
По документации функция get должна возвращать такой массив:
joxi.ru/KAgZQo1I4O6Zg2
Либо массив может быть вот такой (без указания поля, тогда полем считается тип покрытия):
joxi.ru/brRa750tJ8npvA
И каждое значение поля covering будет считаться отдельным полем для фильтрации.
Как изменить принцип построения фильтров, обработать массив иного вида, чем в документации?
Причем методы build и filter не работают — при их явном указании все равно вызываются default.
UPD:
Проблему решил, но ушло много времени на ее выполнение.
Если у кого будет схожая проблема — пишите в комментарии, опишу решение
Возникла нужда сделать свой тип фильтра для товаров…
В админке два поля: покрытие, цвет.
Для каждого товара может быть только одно покрытие и один цвет.
В создании поля не было ничего сложного, трудности появились именно при формировании фильтра:
Цвета должны группироваться по покрытию, то есть покрытие 1 — список цветов, покрытие 2 — список цветов.
Внимательно прочитал
docs.modx.pro/components/msearch2/extension/components/msearch2/the-extension/example-of-filtering-products
docs.modx.pro/components/msearch2/extension/components/msearch2/the-extension/filtering-methods
Подключил кастомный файл фильтров, написал свои функцииget, build, filter, но с некоторыми проблемами не смог разобраться:
По документации функция get должна возвращать такой массив:
Array (
[parent] => array( //поле
[0] => array( //значение, доступное для выбора в фильтре
[0] => 1 //страницы, которые будут доступны при выборе страницы в фильтре
[1] => 2
)
[2] => array(
[0] => 5
)
)
[template] => array(
[1] => array(
[0] => 1
[1] => 2
[2] => 3
),
)
)Для реализации моей задачи массив должен быть либо такой:Array
(
[cover] => Array // название поля
(
[1] => Array // значение поля "covering"
(
[Мелинга серый] => Array // значение поля "color" страниц, у которых нужное значение "covering"
(
[254] => 254 //страницы, которые будут доступны при выборе родительского пункта в фильтре
[259] => 259
[264] => 264
[248] => 248
)
[Капучино] => Array
(
[255] => 255
[260] => 260
[265] => 265
[250] => 250
)
)
[4] => Array
(
[Белый матовый] => Array
(
[283] => 283
[268] => 268
[273] => 273
[278] => 278
)
)
)
)Тогда выводится вот такой фильтр: (по полю covering)joxi.ru/KAgZQo1I4O6Zg2
Либо массив может быть вот такой (без указания поля, тогда полем считается тип покрытия):
Array
(
[1] => Array //значение поля "covering"
(
[Капучино] => Array // значение поля "color" страниц, у которых нужное значение "covering"
(
[255] => 255 //страницы, которые будут доступны при выборе родительского пункта в фильтре
[260] => 260
[265] => 265
[250] => 250
)
[Венге] => Array
(
[257] => 257
[262] => 262
[267] => 267
[252] => 252
)
)
[4] => Array
(
[Белый матовый] => Array
(
[283] => 283
[268] => 268
[273] => 273
[278] => 278
)
)
)Тогда это будет выглядеть вот так:joxi.ru/brRa750tJ8npvA
И каждое значение поля covering будет считаться отдельным полем для фильтрации.
Как изменить принцип построения фильтров, обработать массив иного вида, чем в документации?
Причем методы build и filter не работают — при их явном указании все равно вызываются default.
UPD:
Проблему решил, но ушло много времени на ее выполнение.
Если у кого будет схожая проблема — пишите в комментарии, опишу решение
Комментарии: 5
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
изменения обернуты в комментарий CUSTOM
я положил этот файл рядом с mFilter2 и вызывал сниппет как [[!mFilter2_custom]]
дополнительных комментариев дать не смогу, уже много лет не пишу на modx
ссылка протухнет через 24 часа
codeshare.io/K8PmQ8
@Василий Наумкин надеюсь это не нарушает копирайт? если нарушает прошу удалить
как я понимаю один файл не может быть использован пиратами