Как подружить Сниппет модификатор цены и mFilter2?
Прошу помощи у сообщества и великих разработчиков! Не хватает опыта для божественного колдовства (
На сайте цены пересчитываются, используя сниппет, указанный в Сниппет модификатор цены (ms2_price_snippet) — ночами по крону парсится ставка евро с цбрф и на основе них строятся цены товаров сайта — эта часть работает как часы… НО!
Установил на сайт mSearch2 для фильтрации товаров каталога, и беда-беда-беда, сниппет mFilter2 для построения фильтра берёт значения исходной цены товара, без учёта модификации её через ms2_price_snippet.
Копаясь в Методы фильтрации mSearch2 попробовал добавить в /core/components/msearch2/model/msearch2/filters.class.php функцию buildByRatesFilter(на основе buildNumberFilter), которая при &filters=`ms|price:byrates` даже работает (во всяком случае, значения верхнего и нижнего значения полей фильтра изменяются на нужные мне), но дело в том, что как только начинаю двигать слайдер, содержимое каталога пропадает… я так понимаю, потому, что непосредственная фильтрация происходит всё равно на основе исходной цены товара, которая в 49 раз меньше.
На сайте цены пересчитываются, используя сниппет, указанный в Сниппет модификатор цены (ms2_price_snippet) — ночами по крону парсится ставка евро с цбрф и на основе них строятся цены товаров сайта — эта часть работает как часы… НО!
Установил на сайт mSearch2 для фильтрации товаров каталога, и беда-беда-беда, сниппет mFilter2 для построения фильтра берёт значения исходной цены товара, без учёта модификации её через ms2_price_snippet.
Копаясь в Методы фильтрации mSearch2 попробовал добавить в /core/components/msearch2/model/msearch2/filters.class.php функцию buildByRatesFilter(на основе buildNumberFilter), которая при &filters=`ms|price:byrates` даже работает (во всяком случае, значения верхнего и нижнего значения полей фильтра изменяются на нужные мне), но дело в том, что как только начинаю двигать слайдер, содержимое каталога пропадает… я так понимаю, потому, что непосредственная фильтрация происходит всё равно на основе исходной цены товара, которая в 49 раз меньше.
Комментарии: 22
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Тут да, только свой метод фильтрации делать. Читай документацию, там все понятно. Ты, похоже, добавл не все методы для своего нового фильтра — вот и ошибка.
Ну и менять родной filters.class.php, конечно, не стоит.
Если честно, вообще ничего не добавлял — для быстрой проверки работоспособности скопировал функцию, изменил имя, и min max умножил на 49… может в этом проблема?
Надо сделать, чтобы фильтр строился минут 20.
Что в MS2, что в msDiscount цены меняются при выводе на сайт. А mFilter2 работает с данными, которые хранятся БД.
Если в БД нет модифицированных цен — нечего фильтровать. Именно для таких случаев и предусмотрено расширение методов фильтрации, чтобы можно было запрограммировать любую логику.
Ссылку на документацию с подробными примерами я дал. Вот вообще пошаговое how-to фильтрации наличия товара.
-скопировать туда текущие цены
-чуток изменить скрипт запроса валюты чтоб делал перерасчет цен
-набросать плагин для ручного изменения цены в валюте
-пользоваться всеми удобствами обычной цены minishop2
У товара сделать 2 TV. Первое — это его цена, то самое значение, которое неизменно. Курс, который вы парсите держать в созданной настройке [[++curse]]. А далее просто доработать тот же крон скрипт, который после получения курса пробежится по товарам, возьмет 1 TV поле с неизменной ценой, умножит это на курс, который вы парсите, и сохранит значение во второе TV, по которому и будет идти фильтрация. По мне этот способ будет однозначно быстрее и проще чем дорабатывать mFilter.
Сделал так:
1. Переименовал колонку price (из _ms2_products), в которой были все цены, в price_eur
2. Привязал её к карточке товара, как это описано ЗДЕСЬ. Т.е. на странице товара в админке у меня появилось поле Цена, у.е. (да в лексиконах тоже запись сделал).
3. Создал колонку price в _ms2_products
4. В парсер, который должен выполняться по крону, добавил
и это, и сам парсер взяты отсюда: Цена в рублях по курсу доллара в miniShop2.
5. Отключил сниппет модификатор цен!
6. Руками запустил парсер — колонка price в _ms2_products обновилась.
7. Фильтры заработали по колонке прайс )
И ведь это быстрее, лучше и прозрачнее работает.
Если:
т.е. скидки — это такой же модификатор цен от базового значения, по котором гоняет фильтр
Юзер увидит фильтр по оригинальным ценам, а в выводе товаров уже будет скидка. Генерировать фильтр уже со ссылками можно только запуская msDiscount для каждого товара в своём методе фильтрации для filters.class.php.
Вполне реальная задача, но не я не пробовал.
А можно написать свой «Обновить сайт» и запускать из верхнего меню? Чтобы помимо очистки кеша добавить туда запуск парсера?
Вернее, просто сменить очистку кеша на запуск парсера? Очистка кеша к него есть
При очистке кэша вызывается системное события — можно добавить свой плагин для него.