simpleFilters 1.2.0

Только недавно вышла версия 1.1.0, как перескакиваем сразу на 1.2.0 )

Основные изменения:
  • Добавилась возможность индексации полей ресурсов для ускорения работы.
  • Добавилась возможность настройки алиасов для полей в адресной строке.
  • Изменения в плагине simpleFilters.
  • Добавился сниппет simpleFiltersUpdate.
  • Улучшена JS-обработка слайдеров (из запроса исключаются неактивные параметры).
Обновлены демо и документация.

В сниппете simpleFilters теперь есть параметр &fromIndex, который отвечает за режим работы компонента с базой данных:
1 — выборка производится из собственной таблицы modx_sf_index (быстрее)
0 — выборка производится из родных таблиц ресурсов, TV-параметров и товаров (медленнее)

Если ресурсов немного или нет возможности обновлять индекс (по расписанию, после импорта и т. д), или просто не хочется ничего менять добавьте в вызов &fromIndex=`0` и все будет работать по-старому ).

Работа с индексом


Для того, чтобы компонент работал с индексной таблицей нужно заполнить новые системные настройки:
  • sf_index_templates — ID шаблонов ресурсов, поля которых нужно индексировать
  • sf_index_fields — список полей, которые нужно индексировать
В sf_index_fields используются те же префиксы, что и для указания полей фильтрации: tv_, migx_, ms_ и mso_.
Для MIGX-полей формат тоже аналогичен фильтрам: migx_[имя tv]_[название параметра]:[поле названия]|[поле значения]

Например, у нас установлен MiniShop, шаблоны товаров 4 и 5 и нам нужно фильтровать по:
  • родителю (поле ресурса parent)
  • цене (поле товара price)
  • производителю (поле товара vendor_id)
  • новинке (поле товара new)
  • цвету (поле товара color)
  • материалу (опция товара material)
  • остатку (tv-параметр inctock)
  • полю «Высота» из MIGX-TV chars, у которого названия параметров указаны в поле title, а значения в value
В sf_index_templates указываем 4,5, а в sf_index_fields так:

parent,ms_price,ms_vendor_id,ms_new,ms_color,mso_material,tv_instock,migx_chars_Высота:title|value

Далее нужно загрузить в индекс данные. Сделать это можно двумя способами:

1. Запустить через консоль следующий скрипт:
<?php
$sf = $modx->getService('Simplefilters');
$sf->updateIndexAll();

2. Вызвать один раз на любой странице сайта сниппет simpleFiltersUpdate, который идет в комплекте.

Индексация при сохранении ресурса
Происходит автоматически посредством плагина simpleFilters (висит на событии OnDocFormSave).

Индексация по расписанию
Можно использовать CronManager или Scheduler. Просто добавьте сниппет simpleFiltersUpdate в задание и настройте периодичность запуска.

Индексация после импорта
Если используете Impex3, создайте плагин на событие OnImpexAterAllImport с вышеуказанным скриптом:
switch ($modx->event->name){
    case 'OnImpexAterAllImport':
        $sf = $modx->getService('Simplefilters');
        $sf->updateIndexAll();
    break;
}

Если используете штатный импорт MiniShop3 из CSV, сделайте то же самое на msOnAfterImport:
switch ($modx->event->name){
    case 'msOnAfterImport':
        $sf = $modx->getService('Simplefilters');
        $sf->updateIndexAll();
    break;
}


Псевдонимы фильтров

Псевдонимы для фильтров в адресной строке указываются аналогично mFilter2 — через параметр &aliases:

&aliases=`
  ms_price==price,
  ms_vendor_id==brand,
  ms_new==new,
  ms_color==color,
  mso_material==material,
  tv_instock==instock,
  migx_chars_Высота==height
`

В этом случае для кастомных чанков используйте именно алиас, а не исходное название поля:
$aliases=`ms_new==new`
&tplFilter_new=`чанк_для_блока`
&tplFilterRow_new=`чанк_для_элемента`

То же замечание касается плагинов на события компонента — поля в $data будут соответствовать псевдонимам.
Примеры плагинов вынесены теперь в отдельный файл: core/components/simplefilters/docs/pluginExamples.md
Павел Романов
4 часа назад
modx.pro
24
+2

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

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0