Главная Новости

Фильтрация товаров UMI.CMS. Работа с методом detectFilters

Опубликовано: 01.09.2018

видео Фильтрация товаров UMI.CMS. Работа с методом detectFilters

Уроки UMI.CMS Быстрое редактирование каталога товаров.



Продолжаю экскурс по UMI.CMS. В последний раз я упомянул про  класс предоставляющий заказ, либо корзину заказов пользователя . В этой статье хочу упомянуть про класс selectorHelper, и отличный методы detectFilters

К большому сожалению я нигде не нашел упоминаю про этот великолепный метод... Мною он был обнаружен тогда, когда я изучал работу админ панели сайта.


Движок UMI.CMS | Урок #8 - Макросы для работы с разделами, фильтрация по характеристикам

Расположение classes/system/subsystems/selector/helper.php

В по сути работать с методом очень просто.

Для начала в URL страницы нужно передать параметры . Могут быть следующие параметры:

?search-all-text — параметр который сообщает, что нужно искать текст. Передавать можно только строку. ?fields_filter — параметр сообщает, типы фильтруемых полей и значения. Возможна передача массива, для множественного поиска ?order_filter — параметр для сортировки товаров. Возможна передача массива для сортировки по нескольким полям

Пример URL :


Вебинар от umihelp.ru: углубленный курс по XSLT-шаблонизатору (UMI.CMS)

?search-all-text=текст для поиска ?fields_filter[price][0]=8&fields_filter[price][1]=500&fields_filter[nalichie_kamnej][eq][]=6513 ?order_filter[price]=desc

Пояснение к URL fields_filter .

Если вам нужно искать по диапазону от-до (может быть цена или например вес), то нужно передать в параметр название поля и id 0 и 1 , которые обозначают диапазон:

От fields_filter[price][0]=8 До fields_filter[price][1]=500

Если нужно искать точное соответствие:

fields_filter[nalichie_kamnej][eq][]=6513

Есть еще несколько параметров (с ними мне еще ну удалось поработать):

'ne' => 'notequals', 'like' => 'like', 'gt' => 'more', 'lt' => 'less'

Пояснение к URL order_filter:

Тут все очень просто:

order_filter[price]=asc — по возрастанию order_filter[price]=desc — по убыванию

Теперь, чтобы выборка сработала, вам нужно запустить метод selectorHelper::detectOrderFilters ($sel) . Напоминаю, UMI.CMS уже самостоятельно делает выборку и фильтрацию, вам нужно только вызвать метод.

public function getAllFiltredObjects() { $hierarchy = umiHierarchy::getInstance(); $sel = new selector('pages'); $sel->types('hierarchy-type')->name('catalog', 'object'); selectorHelper::detectOrderFilters($sel); // Отрисовать элементы $lines = Array(); foreach ($sel->result as $item){ $element = $hierarchy->getElement($item->id); $arr['attribute:id'] = $item->id; $arr['attribute:link'] = $item->link; $arr['name'] = $element->name; $lines['nodes:item'][] = $arr; } return array( "items" => $lines, ); }

Не могу не упомянуть про производительность. 

Связка UMI Selector + detectFilters это что-то. Мною было протестировано порядка 15 тыс. товаров с различными фильтрами. Все работает очень и очень быстро.

Если честно, на месте разработчиков UMI я бы отказался от всех устаревших getObjectList и переписал бы все методы, которые используются на fron-end. Пользователи должны сразу получать отличный функционал, а не только быстро работающую админку!!! Я сразу скажу, что понимаю, что все это трудозатратно...

В одной из следующих статей постараюсь подробнее расписать работу с методами — это тоже трудозатратно.

Ну и хочу напомнить службе заботы о том, что они так и не сделали описание данного метода.

3D стерео фильмы для 5D
rss