ModelFilter - фильтр записей
Зависимости
- нет зависимостей
Компонент добавляет на сайт модель ModelFilter, которая позволяет реализовать лёгкий и быстрый фильтр элементов таблицы.
Пример использования
Допустим у нас есть модель TestModel, с различными полями. Мы добавляем в неё публичную переменную $filter и инициализируем её в конструкторе:
class TestModel extends Model { public $filter; public function __construct($id = NULL) { global $g_databases; parent::__construct($g_databases->db, 'model_test', 'id', $id, false); $this->filter = new ModelFilter($g_databases->db, $this->table); } public function CreateTable() { static $arrCreates = array(); if (!isset($arrCreates[$this->table])) { $this->db->query("CREATE TABLE IF NOT EXISTS ?# ( `id` int(11) NOT NULL AUTO_INCREMENT, `text1` varchar(256) CHARACTER SET utf8 NOT NULL, `text2` varchar(256) CHARACTER SET utf8 NOT NULL, `int` int(11), `flt` float, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1", $this->table); } } // ... }
Теперь через эту переменную $filter можно осуществлять поиск нужных элементов:
$testModel = new TestModel(); $filter = array(); $filter["int"] = array('min' => 3007); // все элементы у которых 'int' больше-равно 3007 $ids = $testModel->filter->Filter($filter, 2, 3, "text1"); // вернуть 3 элемента начиная с 2. Упорядочить записи по полю text1 $ids = $testModel->filter->FilterTotal($filter); // общее количество элементов
Другие примеры задания фильтра:
$filter = array(); // все элементы у которых 'int' равно 3002 или 3005 или 3007 или 3008 $filter["int"] = array(3002, 3005, 3007, 3008); $filter = array(); // все элементы у которых либо text1 либо text2 равны ABC $filter["text1,text2"] = "ABC"; $filter = array(); // все элементы у которых text1 равно ABC, а text2 равно DEF $filter["text1"] = "ABC"; $filter["text2"] = "DEF"; $filter = array(); // все элементы у которых либо text1 либо text2 содержат подстроку "а20" либо подстроку "text" $filter["text1,text2"] = array("а20", "%text%");
Примеры сортировки:
// Вернуть и упорядочить записи по полю text1 $ids = $testModel->filter->Filter($filter, 0, 99, "text1"); // Вернуть и упорядочить записи по полю text1 и полю text2 $ids = $testModel->filter->Filter($filter, 0, 99, array("text1", "text2")); // Вернуть и упорядочить записи по полю text1 и полю text2, но упорядочить все в обратном порядке $ids = $testModel->filter->Filter($filter, 0, 99, array("text1", "text2"), true); // Вернуть и упорядочить записи по полю text1 в обратном порядке и полю text2 в прямом порядке. $ids = $testModel->filter->Filter($filter, 0, 99, array("text1", "text2"), "text1"); // Вернуть и упорядочить записи по полю text1 в обратном порядке и полю text2 в в обратном порядке (эквивалент примера номер 3) $ids = $testModel->filter->Filter($filter, 0, 99, array("text1", "text2"), array("text1", "text2"));
Если нужно вернусть все элементы, то массив $filter просто должен быть пуст.