MV framework logo
  • Админ панель
  • Архитектура
  • Поддержка
  • Обратная связь
Скачать .zip ver. 3.4.2 от 04.03.2026
Тёмная тема
Скачать .zip ver. 3.4.2 от 04.03.2026
  • Админ панель
  • Архитектура
  • Поддержка
  • Обратная связь
Документация:
Начало работы
  • Установка и запуск
  • Структура папок
  • Запуск простого сайта
  • Предустановленные модели
  • SQLite начало работы
  • Системные настройки
  • Миграции
  • Отладка
Модели
  • Общие принципы моделей
  • Типы данных
  • Настройка модели
  • Простые модели
  • Внешние ключи
  • Деревья
  • Многие ко многим
  • Группа
  • Управление записями
  • Управление простыми моделями
  • Дополнительные возможности
Шаблоны и маршрутизация
  • Общие принципы шаблонов
  • Объект класса Router
  • Объект MV
  • Создание нового шаблона
  • Вывод данных в шаблоне
  • Объект класса Record
  • Файлы и изображения
  • Дата и время
  • Редиректы и Http
  • Отправка email
  • Специальные методы
Формы
  • Создание форм
  • Настройка полей формы
  • Валидация полей формы
  • Безопасность форм
  • Работа с данными формы
  • Использование данных из моделей
  • Методы форм
SQL запросы
  • Конструктор запросов
  • Прямые запросы
  • Постраничная разбивка
  • Сортировка
  • Фильтрация
Дополнительно
  • AJAX
  • Сессии
  • Авторизация
  • Плагины
  • Кэширование
  • Безопасность
  • Дополнения к административной панели
MV tracker
Тёмная тема
Документация:
Начало работы
  • Установка и запуск
  • Структура папок
  • Запуск простого сайта
  • Предустановленные модели
  • SQLite начало работы
  • Системные настройки
  • Миграции
  • Отладка
Модели
  • Общие принципы моделей
  • Типы данных
  • Настройка модели
  • Простые модели
  • Внешние ключи
  • Деревья
  • Многие ко многим
  • Группа
  • Управление записями
  • Управление простыми моделями
  • Дополнительные возможности
Шаблоны и маршрутизация
  • Общие принципы шаблонов
  • Объект класса Router
  • Объект MV
  • Создание нового шаблона
  • Вывод данных в шаблоне
  • Объект класса Record
  • Файлы и изображения
  • Дата и время
  • Редиректы и Http
  • Отправка email
  • Специальные методы
Формы
  • Создание форм
  • Настройка полей формы
  • Валидация полей формы
  • Безопасность форм
  • Работа с данными формы
  • Использование данных из моделей
  • Методы форм
SQL запросы
  • Конструктор запросов
  • Прямые запросы
  • Постраничная разбивка
  • Сортировка
  • Фильтрация
Дополнительно
  • AJAX
  • Сессии
  • Авторизация
  • Плагины
  • Кэширование
  • Безопасность
  • Дополнения к административной панели
MV tracker
На главную SQL запросы Фильтрация

Фильтрация

При выводе списков данных из моделей фильтрация осуществляется на основании параметров из раздела Конструктор запросов.  Для запуска фильтров по полям модели используется класс Filter и его объект, доступный из объекта модели.

Пример реализации

https://github.com/makscraft/workshop-mv/blob/main/filtration/view-items-filtration.php

class Furniture extends Model 
{
    protected $name = 'Мебель';

    protected $model_elements = [
        ['Активен', 'bool', 'active', ['on_create' => true]],
        ['Изображения', 'multi_images', 'images'],
        ['Описание', 'text', 'description'],
        ['Цена', 'int', 'price'],
        ['Площадь комнаты', 'int', 'square'],
        ['Расположение', 'enum', 'location', [
                'empty_value' => true, 
                'values_list' => [
                    'bedroom' => 'В спальне',
                    'livingroom' => 'В гостиной',
                    'childrenroom' => 'В детской',
                    'corridor' => 'В коридоре'
                ]
            ]
        ]
    ];
}

Нас интересуют поля price, square и location, по которым мы будем делать фильтрацию товаров. В файле шаблона создадим объект класса Filter, который может принимать GET параметры со значениями фильтров в виде ‘price-from=12000&square-to=50&location=livingroom’.

При запуске объекта Filter поиск нужных GET параметров запускается автоматически.

<?
//Файл шаблона

$mv -> furniture -> runFilter(['price', 'square', 'location']);
?>

<form method='get' action='<? echo $mv -> root_path; ?>furniture'>
    <? echo $mv -> furniture -> filter -> display(); ?>
    <button>Найти</button>
</form>

В модели в методе вывода списка товаров добавляем параметры фильтрации.

class Furniture extends Model 
{
    ...
    
    public function display()
    {
        //Массив условий заданных фильтров
        $conditions = $this -> filter -> getConditions();
        
        //Дополнительны условия
        $conditions['active'] = 1;
        
        //Выборка записей
        $rows = $this -> select($conditions);
        
        ...
    }
}

При отображении фильтров в шаблонах можно использовать различные методы и параметры.

//Запуск объекта фильтра для модели
$mv -> furniture -> runFilter(['price', 'square', 'location']);

//Вывод полей всех запущенных фильтров
echo $mv -> furniture -> filter -> display();

//Вывод выборочных фильтров в нужной последовательности
echo $mv -> furniture -> filter -> display(['location', 'price']);

//Вывод одного фильтра
echo $mv -> furniture -> filter -> display('square');

Методы объекта Filter

  • display() - выводит HTML код для полей фильтров или одного поля
  • displayCheckbox($field) - выводит HTML код для полей типа bool, image, file, multi_images в виде элемента checkbox (по умолчанию выводится тэг select с вариантами да, нет, не задан). В случае с checkbox значение 'нет' не определяется
  • getConditions() - возвращает массив значений переданных фильтров, в формате Конструктора запросов
  • getUrlParams() - возвращает список GET параметров значений фильтров для URL
  • addUrlParams($path) - добавляет значения (GET параметры) установленных фильтров к переданному URL
  • hasParams() - проверяет установлен ли хотя бы один фильтр, если да, то вернет true
  • getValue($field, [$condition]) - возвращает значение фильтра если оно передано в GET, второй необязательный параметр нужен для полей типа date, date_time, int, float, order, в которых значения передаются как интервалы. Параметр принимает значения 'from' и 'to'.
  • setValue($field, $value, [$condition]) - позволяет вставить значение для фильтра, принимает в качестве аргументов название поля и значение. Необязательный параметр нужен для передачи параметров для интервальных фильтров, аналогично предыдущему методу.
  • addFilter($caption, $type, $name, [$extra_params]) - добавляет новый фильтр в объект filter, аргументы аналогичны типам данных
  • removeFilter($field) - удаляет фильтр по названию поля
  • setCaption($field, $caption) - устанавливает название (подпись) поля в списке фильтров
  • setEnumEmptyValueTitle($field, $title) - для полей типа enum можно менять подпись пустого значения (используется в случаях когда в самом теге select нужно поставить его название). Для данного элемента модели изначальна должна быть задана опция 'empty_value' => true
  • displaySingleField($field) - для полей типа date, date_time, int, float, order по умолчанию выводятся 2 окна input с целью задания интервала значений от и до. Если интервал не нужен и необходим вывод только одного элемента формы, то нужно использовать данный метод.
  • filterValuesList($field, $params) - для полей типа enum с внешним ключом, parent и many_to_many есть возможность фильтрации списка значений, используя параметры в формате Конструктора запросов, $field - название поля, $params - массив параметров для фильтрации и/или упорядочивания.
  • addOptionToValuesList($field, $value, $title) - для полей типа enum и parent дает возможность добавить значение в список опций
  • setDisplaySingleField($field) - для полей типа date, date_time, int, float, order задает опцию, при которой поле будет выведено как как одно текстовое поле, а не интервал из двух полей. Также, фильтр будет принимать значение в виде единственного GET параметра, вместо интервальных значений 'from' и 'to'.
  • setDisplayCheckbox($field) - для полей типа bool, image, file, multi_images задает опцию отображения в виде элемента checkbox, в результате вызова функции display()
  • setDisplayEnumRadio($field, $columns) - для полей типа enum задает опцию вывода html кода в виде таблицы с кнопками radio, параметр $columns задает количество колонок в таблице.
  • setDisplayEnumCheckboxes($field, $columns, [$empty_checkbox]) - для поля типа enum задает возможность отображения списка значений в виде таблицы с чекбоксами. Параметры $field - название поля, $columns - количество колонок в таблице, $empty_checkbox - необязательный параметр, показывающий надо ли отображать первым в списке чекбокс с пустым значением (например для производителей 'Все производители'). Выводит html таблицу с полями checkbox. Таким образом можно организовать множественный выбор. Фильтр для данного поля в таком случает отдаст значение вида '2,7,24'.
  • setDisplayCheckboxTable($field, $columns) - для полей типа many_to_many задает отображение в виде таблицы с чекбоксами аналогично предыдущему методу
  • setManyToManyEmptyValueTitle($field, $title) - для полей типа many_to_many задает подпись для пустого значения, когда фильтр отображается тэгом select.
//Получение значений фильтров
$mv -> furniture -> filter -> getValue('location');
$mv -> furniture -> filter -> getValue('price', 'from');
$mv -> furniture -> filter -> getValue('price', 'to');

//Добавление параметров фильтрации к URL
$path = $mv -> root_path.'search/?page=3';
$path = $mv -> furniture -> filter -> addUrlParams($path);

//Если хотя бы один фильтр установлен
if($mv -> furniture -> filter -> hasParams())
{
    ...
}

//Задание подписи для пустого значения поля 'enum' 
$mv -> furniture -> filter -> setEnumEmptyValueTitle('location', 'Выберите расположение');
echo $mv -> furniture -> filter -> display('location');

//Сделаем возможность множественного выбора для поля 'Расположение' 
$mv -> furniture -> filter -> setDisplayEnumCheckboxes('location', 2);

//Зададим отображение поля в виде radio кнопок в 3 столбца
$mv -> furniture -> filter -> setDisplayRadio('location', 3);

//Поле 'Активен' будем выводить как checkbox
$mv -> furniture -> filter -> setDisplayCheckbox('active');

//Поле цены выводим как одиночное поле для задания значения без интервала
$mv -> furniture -> filter -> setDisplaySingleField('price');

//Выводим все поля фильтра со всеми заданными опциями
echo $mv -> furniture -> filter -> display();

Примечания и рекомендации

  • В результате вызова метода getConditions() возвращается набор условий, которые конструктор запросов свяжет между собой через И, при этом если для полей типа enum и many_to_many задается множественный выбор в виде таблицы с чекбоксами, то вернется конструкция вида 'field->in' => '8,25,87', что говорит о связи для данного поля через 'ИЛИ'.
  • Поля типа date, date_time, int, float, order фильтруют по интервалам 'от' и 'до'. При вызове метода display() для такого поля возвращается 2 текстовых поля формы для задания интервала ('from', 'to'). Например в модели Furniture для поля price будут выведены поля с именами 'price-from' и 'price-to'. Если нужно вывести одно общее поле без интервалов, то используется метод displaySingleField().
  • Поле вида Многие ко многим изначально будет отображаться в результате вызова метода display() в виде элемента select с возможностью выбора одного значения. Если же для поля задано отображение в виде чекбоксов методом setDisplayCheckboxTable($field, $columns), то будет отображаться список чекбоксов с возможностью множественного выбора.
  • Для полей типа image, file, multi_images метод getConditions() возвращает конструкцию 'field->like' => '.', что при SQL запросе будет являться проверкой на наличие пути файла в ячейке SQL таблицы, при этом если необходимо проверить наличие реального файла на диске, нужно использовать функции php для работы с файловой системой.

Предыдущий раздел

Сортировка

Следующий раздел

AJAX
MV workshop banner
MV tracker

© 2014-2026, MV framework team

English MV tracker project Github

Поделиться