Настройка своих фильтров в 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 должна возвращать такой массив:
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:
Проблему решил, но ушло много времени на ее выполнение.
Если у кого будет схожая проблема — пишите в комментарии, опишу решение
Олег
09 февраля 2017, 10:21
modx.pro
1 382
0

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

Александр Иващенко
27 декабря 2018, 04:11
0
Напишите пожалуйста решение
    Олег
    27 декабря 2018, 06:08
    0
    Пришлось немного поменять сниппет, скйчас не могу отправить. Если вдруг сегодня завтра не напишу пинганите меня ещё раз, пожалуйста.
      Александр Иващенко
      08 января 2022, 09:26
      0
      ping
        Олег
        08 января 2022, 14:54
        0
        прикладываю модифицированную версию скрипта mFilter2 1.7.3 (очень старая, но новее версии не увидел)
        изменения обернуты в комментарий CUSTOM

        я положил этот файл рядом с mFilter2 и вызывал сниппет как [[!mFilter2_custom]]
        дополнительных комментариев дать не смогу, уже много лет не пишу на modx

        ссылка протухнет через 24 часа
        codeshare.io/K8PmQ8

        @Василий Наумкин надеюсь это не нарушает копирайт? если нарушает прошу удалить
        как я понимаю один файл не может быть использован пиратами
          Олег
          08 января 2022, 15:07
          0
          убрал на всякий случай код, чтобы не лежал в открытом доступе
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    5