simpleFilters 1.2.0
Только недавно вышла версия 1.1.0, как перескакиваем сразу на 1.2.0 )
Основные изменения:
В сниппете simpleFilters теперь есть параметр &fromIndex, который отвечает за режим работы компонента с базой данных:
1 — выборка производится из собственной таблицы modx_sf_index (быстрее)
0 — выборка производится из родных таблиц ресурсов, TV-параметров и товаров (медленнее)
Если ресурсов немного или нет возможности обновлять индекс (по расписанию, после импорта и т. д), или просто не хочется ничего менять добавьте в вызов &fromIndex=`0` и все будет работать по-старому ).
Для того, чтобы компонент работал с индексной таблицей нужно заполнить новые системные настройки:
Для MIGX-полей формат тоже аналогичен фильтрам: migx_[имя tv]_[название параметра]:[поле названия]|[поле значения]
Например, у нас установлен MiniShop, шаблоны товаров 4 и 5 и нам нужно фильтровать по:
Далее нужно загрузить в индекс данные. Сделать это можно двумя способами:
1. Запустить через консоль следующий скрипт:
2. Вызвать один раз на любой странице сайта сниппет simpleFiltersUpdate, который идет в комплекте.
Если используете штатный импорт MiniShop3 из CSV, сделайте то же самое на msOnAfterImport:
В этом случае для кастомных чанков используйте именно алиас, а не исходное название поля:
То же замечание касается плагинов на события компонента — поля в $data будут соответствовать псевдонимам.
Примеры плагинов вынесены теперь в отдельный файл: core/components/simplefilters/docs/pluginExamples.md
0
Основные изменения:
- Добавилась возможность индексации полей ресурсов для ускорения работы.
- Добавилась возможность настройки алиасов для полей в адресной строке.
- Изменения в плагине simpleFilters.
- Добавился сниппет simpleFiltersUpdate.
- Улучшена JS-обработка слайдеров (из запроса исключаются неактивные параметры).
1 — выборка производится из собственной таблицы modx_sf_index (быстрее)
0 — выборка производится из родных таблиц ресурсов, TV-параметров и товаров (медленнее)
Если ресурсов немного или нет возможности обновлять индекс (по расписанию, после импорта и т. д), или просто не хочется ничего менять добавьте в вызов &fromIndex=`0` и все будет работать по-старому ).
Работа с индексом
Для того, чтобы компонент работал с индексной таблицей нужно заполнить новые системные настройки:
- sf_index_templates — ID шаблонов ресурсов, поля которых нужно индексировать
- sf_index_fields — список полей, которые нужно индексировать
Для MIGX-полей формат тоже аналогичен фильтрам: migx_[имя tv]_[название параметра]:[поле названия]|[поле значения]
Например, у нас установлен MiniShop, шаблоны товаров 4 и 5 и нам нужно фильтровать по:
- родителю (поле ресурса parent)
- цене (поле товара price)
- производителю (поле товара vendor_id)
- новинке (поле товара new)
- цвету (поле товара color)
- материалу (опция товара material)
- остатку (tv-параметр inctock)
- полю «Высота» из MIGX-TV chars, у которого названия параметров указаны в поле title, а значения в value
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