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

Фильтрация

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

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-2025, MV framework team

English MV tracker project Github

Поделиться