Настройка своих фильтров в 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
Напишите пожалуйста решение
Пришлось немного поменять сниппет, скйчас не могу отправить. Если вдруг сегодня завтра не напишу пинганите меня ещё раз, пожалуйста.
ping
прикладываю модифицированную версию скрипта mFilter2 1.7.3 (очень старая, но новее версии не увидел)
изменения обернуты в комментарий CUSTOM
я положил этот файл рядом с mFilter2 и вызывал сниппет как [[!mFilter2_custom]]
дополнительных комментариев дать не смогу, уже много лет не пишу на modx
ссылка протухнет через 24 часа
codeshare.io/K8PmQ8
@Василий Наумкин надеюсь это не нарушает копирайт? если нарушает прошу удалить
как я понимаю один файл не может быть использован пиратами
изменения обернуты в комментарий CUSTOM
я положил этот файл рядом с mFilter2 и вызывал сниппет как [[!mFilter2_custom]]
дополнительных комментариев дать не смогу, уже много лет не пишу на modx
ссылка протухнет через 24 часа
codeshare.io/K8PmQ8
@Василий Наумкин надеюсь это не нарушает копирайт? если нарушает прошу удалить
как я понимаю один файл не может быть использован пиратами
убрал на всякий случай код, чтобы не лежал в открытом доступе
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.