backend_prod_filters

Позволяет добавлять дополнительные варианты фильтрации товаров в новом интерфейсе (2.0). Каждый вариант может быть применён в одном или в нескольких экземплярах — с разными значениями для фильтрации товаров, указанными пользователем.

Доступно начиная с версии 10.1.0.

Shop-Script

Входящие параметры (передаются по ссылке)

$params['collection'] object|null Экземпляр класса коллекции товаров shopProductsCollection. В обработчике хука нужно вызывать публичные методы этого класса (например, addWhere() или addJoin()) для дополнительной фильтрации товаров в соответствии с настроенными правилами, информация о которых доступна в параметре $params['filter']['rules']. Этот параметр может быть пуст, когда приложению нужно только получить список доступных вариантов фильтрации — без формирования списка товаров.
$params['filter'] array|null Информация о применённых фильтрах для формирования списка товаров. Этот параметр может быть пуст, когда приложению нужно только получить список доступных вариантов фильтрации — без формирования списка товаров.
$params['filter']['rules'] array Список всех настроенных групп правил фильтрации — и стандартных для Shop-Script, и добавленных плагинами.
$params['filter']['rules'][]['type'] string Идентификатор правила фильтрации. По нему можно определить, относится ли он к данному плагину и нужно ли его обрабатывать.
$params['filter']['rules'][]['rules'] array Информация обо всех значениях правила, которые указал пользователь.
$params['filter']['rules'][]['rules'][]['rule_params'] string Отдельное значение правила, по которому нужно фильтровать товары.
… код плагина …

Результат работы плагина

$output
Список вариантов фильтрации, добавленных плагином, которые должны быть доступны пользователю. Каждый элемент списка — массив со следующими ключами:
- name Локализованное название. Видно пользователю в списке доступных вариантов фильтрации товаров.
- rule_type Идентификатор варианта фильтрации. Он должен начинаться с идентификатора плагина, и по нему вы сможете опознать этот вариант в параметре $params['filter']['rules'][]['type'].
- replaces_previous Флаг, обозначающий, что вариант фильтрации может применяться к списку товаров только в одном экземпляре. Если флаг не установлен, вариант можно применить к списку несколько раз и для каждого экземпляра указать своё значение. Каждый новый экземпляр, применённый пользователем, добавляет дополнительное условие фильтрации.
- render_type Обозначение визуального интерфейса для настройки правила фильтрации: 'range' (2 текстовых поля для ввода минимального и максимального значений диапазона в произвольном текстовом виде), 'range.date' (2 поля для выбора диапазона дат), 'radio' (список радиокнопок), 'checklist' (список переключателей-флажков), 'custom' (собственный интерфейс настроек в виде произвольного HTML-кода).
- icon_class Имена CSS-классов для отображения собственной иконки Font Awesome в списке фильтров, например, fas fa-user.
- icon_img URL файла изображения для отображения произвольной иконки в списке фильтров.
- options Список значений, доступных пользователю. Для типов 'range' и 'range.date', указанных в поле 'render_type', используются необязательные списки только из 2 элементов, если нужно показать пользователю значения по умолчанию для начала и конца диапазона. Эти значения по умолчанию могут редактироваться пользователем. Каждый элемент списка значений — массив со следующими ключами:
- options[]['value']: Значение, которое, будучи выбранным пользователем, будет доступно в составе параметра $params['filter']['rules'][]['rules'][]['rule_params'].
- options[]['name']: Локализованное наименование значения. Используется только для типов 'radio' и 'checklist'.
- html: Строка HTML-кода для отображения собственного интерфейса настройки правил типа 'custom'. На сервере будет доступно (в виде строки в параметре $params['filter']['rules'][]['rules'][]['rule_params']) только значение HTML-элемента с атрибутом name="rule_params". Поэтому, если пользователю доступно для редактирования несколько полей, то средствами JavaScript нужно заполнить их значениями значение единственного (обычно скрытого) элемента с таким атрибутом. Для объединения нескольких значений в одно можно использовать, например, формат JSON.
- dialog_url: URL, с которого нужно получить строку HTML-кода для отображения собственного интерфейса настройки правила типа 'custom', если HTML-код не указан в поле 'html'.
Shop-Script

Пример кода плагина

PHP

public function backendProdFilters(&$params)
{
    // process filters set up by a user
    if (!empty($params['filter']['rules'])) {
        /** @var shopProductsCollection $collection */
        $collection = $params['collection'];

        foreach ($params['filter']['rules'] as $rule) {
            if ($rule['type'] === $this->id . '_radio') {
                if ($rule['rules'][0]['rule_params'] === '100') {
                    $collection->addWhere('p.price > 100');
                }
            }
        }
    }

    // return available filtering options
    return [
        [
            'name' => _wp('Simple range filter'),
            'rule_type' => $this->id . '_range',
            'replaces_previous' => false,
            'render_type' => 'range',
            'icon_class' => 'fas fa-user',
            'options' => [
                ['value' => '1'],
                ['value' => '1000'],
            ],
        ],
        [
            'name' => _wp('Date range filter'),
            'rule_type' => $this->id . '_range_date',
            'replaces_previous' => true,
            'render_type' => 'range.date',
            'icon_class' => 'fas fa-user',
            'options' => [
                ['value' => '2022-11-11'],
                ['value' => '2023-11-11'],
            ],
        ],
        [
            'name' => _wp('Radio filter'),
            'rule_type' => $this->id . '_radio',
            'replaces_previous' => true,
            'render_type' => 'radio',
            'icon_class' => 'fas fa-user',
            'options' => [
                ['value' => '10', 'name' => _wp('over 10')],
                ['value' => '100', 'name' => _wp('over 100')],
                ['value' => '1000', 'name' => _wp('over 1000')],
            ],
        ],
        [
            'name' => _wp('Check list filter'),
            'rule_type' => $this->id . '_checklist',
            'replaces_previous' => true,
            'render_type' => 'checklist',
            'icon_class' => 'fas fa-user',
            'options' => [
                ['value' => 'one', 'name' => _wp('one')],
                ['value' => 'two', 'name' => _wp('two')],
                ['value' => 'three', 'name' => _wp('three')],
            ],
        ],
        [
            'name' => _wp('Custom dialog filter'),
            'rule_type' => $this->id . '_custom',
            'replaces_previous' => true,
            'render_type' => 'custom',
            'icon_class' => 'fas fa-user',
            // 'html' => 'custom HTML here if "dialog_url" field is not used',
            'dialog_url' => '?plugin=' . $this->id . '&module=products&action=filterDialog',
        ],
    ];
}