[SelectFilters] - выбор фильтров для mFilter2



Всем привет, написал простенькое дополнение которое решает одну очень надоевшую проблему — клиент не может выбирать какие опции miniShop2 попадут в фильтр товаров mFilter2. В общем дополнение добавляет чекбокс в окно создания и редактирования опций, в комплекте также сниппет подготовки поля 'filter'


Использование


Перед вызовом mFilter2 вызываем сниппет SelectFilters, в default передаем свойства, которые не относятся к msOption
{set $filters = '!SelectFilters' | snippet: [
    'default' => [
        'ms|price:number', 'ms|vendor:vendors'
    ]
]}
В сниппете mFilter2 в параметре filters указываем нашу переменную

'filters' => $filters

Сниппет getCaption


Сниппет getCaption достает название опции не из лексиконов (как по умолчанию в минишопе), а из базы данных таблицы msOption.
Чаще всего это необходимо при автоматическом создании опций, либо если вы не хотите объяснять клиенту как создавать опции в лексиконах

Использование

Использование сниппета максимально простое: сниппет ждет на вход ключ msOption.
В outer чанка вывода примените модификатор getOption, вот например как это выглядело бы в стандартном чанке tpl.mFilter2.filter.outer

<fieldset id="mse2_{$table}{$delimeter}{$filter}">
    <!-- <h4 class="filter_title">[[%mse2_filter_[[+table]]_[[+filter]]]]</h4> -->
	<h4 class="filter_title">{$filter | getCaption}</h4>
	{$rows}
</fieldset>
Вот собственно и все, дополнение бесплатное и скоро надеюсь появится в modstore

Исходники
Modstore
Pavel Zarubin
03 декабря 2019, 18:58
modx.pro
6
1 418
+15
Поблагодарить автора Отправить деньги

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

Sergey (Sentinel)
03 декабря 2019, 19:06
0
Прикольно. Немного похоже на msProductsComposerSelection
    Pavel Zarubin
    03 декабря 2019, 19:12
    0
    Хз, не использовал его если честно)
    Pavel Zarubin
    03 декабря 2019, 19:12
    0
    В ближайших планах:
    Добавить select выбора чанка вывода опции прямо в окно создания / редактирования опции

    github.com/pavel-one/SelectFilters/issues/2
    Здоров Александр
    03 декабря 2019, 20:39
    0
    круто, спасибо за дополнение!
    вопрос, а порядок фильтров сейчас как строится? например, чтобы было можно выставить собственный приоритет позиций.
    igos
    03 декабря 2019, 22:38
    +1
    написал простенькое дополнение которое решает одну очень надоевшую проблему — клиент не может выбирать какие опции miniShop2 попадут в фильтр товаров mFilter2
    Получается единый набор опций для всех категорий? Есть (или может планируется ) возможность их разделить по категориям?
      Pavel Zarubin
      04 декабря 2019, 03:21
      0
      Получается единый набор опций для всех категорий? Есть (или может планируется ) возможность их разделить по категориям?
      А в случае если вы выводите опции без дополнения у вас не единый набор?) По моему что с дополнением, что без него у вас и так один и тот же набор, а вот выводить опцию или нет уже решает сам mFilter
        igos
        04 декабря 2019, 03:28
        0
        Всё верно, набор единый. Но я говорю про кейс от клиента, у меня он максимально часто встречается:

        Есть опция, она привязана ко всем категориям на сайте, заполнена во всех товарах. Клиент хочет её выводить в фильтр только в некоторых категориях. Ну и таких опций на сайте естественно много, а клиент хочет этим управлять, вкл/выкл :)

        UPD.: я юзаю вышеупомянутый msProductsComposerSelection для этого, но решил уточнить, вдруг и здесь планируется такое счастье.
          Pavel Zarubin
          04 декабря 2019, 11:19
          +1
          Есть опция, она привязана ко всем категориям на сайте, заполнена во всех товарах. Клиент хочет её выводить в фильтр только в некоторых категориях. Ну и таких опций на сайте естественно много, а клиент хочет этим управлять, вкл/выкл
          Ну увы, это дополнение не про это, я с пол года работал в «студии» где делал «сайты» на потоке, когда делаешь говносайты на потоке (2-3 дня на сайт) такие кейсы редко встречаются)

          я юзаю вышеупомянутый msProductsComposerSelection для этого, но решил уточнить, вдруг и здесь планируется такое счастье.
          Нет, не планируется, все что планируется на данный момент можно посмотреть тут github.com/pavel-one/SelectFilters/issues
            igos
            04 декабря 2019, 13:06
            0
            Для простых каталогов однозначно круто-полезно будет :) спасибо за дополнение!
      Юрий
      16 декабря 2019, 15:29
      0
      Подскажите. У меня если отметить «Показать в фильтрах», а потом снять отметку то она возвращается. Получается что я не могу удалить опцию из фильтра если один раз её добавил?
        Pavel Zarubin
        16 декабря 2019, 15:50
        0
        Поправил, обновитесь
        Юрий
        16 декабря 2019, 16:09
        0
        Обновился не помогло
          Pavel Zarubin
          16 декабря 2019, 16:10
          0
          Кэш браузера пробовали очищать? Еще раз проверил, у меня все работает
          Юрий
          16 декабря 2019, 16:12
          0
          Да, я всё вычистил. кеш браузера, core/cashe, Полностью удалил дополнения. Переустановил не помогло. Убираю галочку. Сохраняю открываю опцию галочка на месте.
            Pavel Zarubin
            16 декабря 2019, 16:16
            0
            Не знаю) Попробуйте с инкогнито) Поднял тестовый, на нем тоже все ок

            s20760.h10.modhost.pro/manager/
            s20760
            JeKS3eJ9BCQi
            Юрий
            16 декабря 2019, 16:26
            0
            Дополнение работает. В инкогнито работает. Возвращаюсь в обычный режим не удаляется. Буду искать. Спасибо
              Maxim
              23 октября 2020, 03:08
              0
              Подскажите как сделать чтобы автоматически понимало что поле нужно выводить не чекбоксами а слайдером, как фильтрация по цене?
              А то у меня получаются все значения чекбоксами выводить
                Константин
                26 апреля 2022, 14:00
                0
                Приветствую, подскажите пожалуйста, как поменять порядок групп фильтров? К примеру 'default' => [
                'ms|vendor:vendors', 'resource|parent:parents'

                Эта группа фильтров должна идти последней: resource|parent:parents

                А она выводится второй после ms|vendor:vendors
                  Sergey (Sentinel)
                  26 апреля 2022, 18:06
                  0
                  нужно поместить чанки этих фильтров последними наверное
                    Константин
                    26 апреля 2022, 18:11
                    0
                    Спасибо, сделал, кеш чистил, все равно не правильная последовательность…
                    Блок фильтров по каталогам в самой середине: prnt.sc/gPEm6FcerM3r
                      Sergey (Sentinel)
                      26 апреля 2022, 20:26
                      0
                      Прикрепи код вызова
                        Константин
                        27 апреля 2022, 08:57
                        0

                        {set $filters = '!SelectFilters' | snippet: [
                        'default' => [
                        'ms|vendor:vendors', 'resource|parent:parents'
                        ]
                        ]}

                        {$_modx->runSnippet('!mFilter2', [
                        'element' => 'msProducts',
                        'class' => 'msProduct',
                        'showEmptyFilters' => 1,
                        'limit' => 12,
                        'tplOuter' => 'mFilter2OuterTpl',
                        'tpls' => 'listProductTpl,gridProductTpl',
                        'includeTVs' => 'available',
                        'includeThumbs' => 'medium',
                        'tplPageWrapper' => '@INLINE
                          {$prev}{$pages}{$next}
                        ',
                        'tplPageActive' => '@INLINE {$pageNo}',
                        'tplPage' => '@INLINE {$pageNo}',
                        'tplPagePrev' => '@INLINE «',
                        'tplPageNext' => '@INLINE »',
                        'tplPagePrevEmpty' => '@INLINE «',
                        'tplPageNextEmpty' => '@INLINE »',
                        'filters' => $filters,
                        'aliases' => 'ms|vendor==vendor,
                        msoption|marka==marka,
                        msoption|model==model',
                        'ajaxMode' => 'button',
                        'filterOptions' => '{
                        «more_tpl»: "<button class=\«btn btn-blue btn-rounded btn_more\»>Загрузить еще"
                        }',

                        'tplFilter.outer.default' => 'filterSelectOuter',
                        'tplFilter.row.default' => 'filterSelectRow',

                        'tplFilter.outer.vendor' => 'filterCheckboxOuter',
                        'tplFilter.row.vendor' => 'filterCheckboxRow',

                        'tplFilter.outer.marka' => 'filterSelectOuter',
                        'tplFilter.row.marka' => 'filterSelectRow',

                        'tplFilter.outer.model' => 'filterSelectOuter',
                        'tplFilter.row.model' => 'filterSelectRow',

                        'tplFilter.outer.resource|parent:parents' => 'filterSelectOuter',
                        'tplFilter.row.resource|parent:parents' => 'filterSelectRow',

                        ])}


                          Sergey (Sentinel)
                          27 апреля 2022, 15:40
                          0
                          а зачем тут SelectFilters?
                          попробуй так
                          ...
                          'filters' => 'ms|vendor:vendors,
                          parent:parents',
                          ...
                          и название чанков наверное не верно
                          по идеи так
                          'tplFilter.outer.resource|parent' => 'filterSelectOuter',
                          'tplFilter.row.resource|parent' => 'filterSelectRow',
                          все есть тут
                          docs.modx.pro/komponentyi/msearch2/snippetyi/mfilter2#%D0%A7%D0%B0%D0%BD%D0%BA%D0%B8-%D0%B8-%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5
                            Константин
                            27 апреля 2022, 18:47
                            0
                            Вот же в документации к SelectFilters пример использования: prnt.sc/Pr7uUq8L0j7o
                            В том и дело, что если группы фильтров через mfilter2 вызывать, то порядок как раз меняется порядком чанков.

                            А с использованием SelectFilters, порядок сбивается. Этот компонент н умеет походу порядок поддерживать тот который нужен. Он всовывает дефолтные группы фильтров в начало.

                            Название чанков поменял, тот же результат.
                              Sergey (Sentinel)
                              28 апреля 2022, 09:59
                              0
                              Я честно не могу понять зачем для этих фильтров использовать сниппет SelectFilters?
                              Как ими можно управлять из админки? Компонент SelectFilters создан именно для опций.
                              выводи фильтры вот так
                              'filters' => $filters, ~ 'ms|vendor:vendors,
                              parent:parents',
                                Константин
                                28 апреля 2022, 17:18
                                0
                                Спасибо, попробовал так, но пустая страница и ошибка:
                                Unexpected token '~' in expression in e014f8071b522126681529ed92e5b3d5 line 377

                                Ругается на этот символ ~, я так понял
                                  Sergey (Sentinel)
                                  28 апреля 2022, 18:26
                                  0
                                  а, ну там запятая наверное
                                  'filters' => $filters ~ ',ms|vendor:vendors,
                                  parent:parents',
                                    Константин
                                    29 апреля 2022, 09:58
                                    0
                                    Ура, заработало, спасибо огромное за помощь)))
                                    Sergey (Sentinel)
                                    29 апреля 2022, 10:00
                                    0
                                    Супер. Не за что ;-)
                                    Константин
                                    29 апреля 2022, 17:44
                                    0
                                    А можно еще вопрос, тоже касается сортировки и mfilter2, но тут задача попроще вроде, но тоже не могу докумекать, как реализовать. Можно ли как-то поменять в выпадающем списке порядок: prnt.sc/4nPxdi19Oc7D
                                    Что бы KIA была первой в списке?
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                35