private function setFilters(ormSelect $sel, $section_id, $class_name) { $is_filtered = false; if (empty($class_name) && $section_id != 'NULL') { $sel_tmp = new ormSelect(); $sel_tmp->findInPages(); $sel_tmp->where('parents', '=', $section_id); $class_name = $sel_tmp->getObjectsClass(); } $fields = !empty($class_name) && ($class = ormClasses::get($class_name)) ? $class->loadFields() : array(); $prefix = md5($class_name . $section_id); if (isset($_SESSION['filters'][$prefix])) { while (list($fname, $field) = each($fields)) { if ($field['f_filter'] && $field['f_type'] < 100) { $this->checkFilterPost($fname, $field, $prefix); // Устанавливаем уловия выборки в соотвествии с тем, что у нас лежит в сессии. if (isset($_SESSION['filters'][$prefix][$fname])) { if (isset($_SESSION['filters'][$prefix][$fname . '_2'])) { $value2 = $_SESSION['filters'][$prefix][$fname . '_2']; } else { if (isset($value2)) { unset($value2); } } $value = $_SESSION['filters'][$prefix][$fname]; // Устанавливаем на основе сохраненных данных фильтры if ($value !== '' || isset($value2) && $value2 !== '') { if (is_array($value) && isset($value['val'])) { // Фильтр по первым буквам $sel->where($fname, 'LIKE', $value['val'] . '%'); $is_filtered = true; } else { if ($field['f_type'] == 50) { // Галочка if (!empty($value)) { $value = $value === 1 ? true : false; $sel->where($fname, '=', $value); $is_filtered = true; } } else { if ($field['f_type'] > 69 && $field['f_type'] < 86) { // Файлы if ($value === 1) { $sel->where($fname, '<>', ''); $is_filtered = true; } else { if ($value === 2) { $sel->where($fname, '=', ''); $is_filtered = true; } } } else { if ($field['f_type'] == 90 || $field['f_type'] == 95) { // Справочники if (!empty($value)) { $sel->where($fname, '=', $value); $is_filtered = true; } } else { if ($field['f_type'] == 25 || $field['f_type'] == 30 || $field['f_type'] == 32) { // Фильтры по временным отрезкам if ($field['f_type'] == 25) { // Дата if (!empty($value)) { $value = date('Y-m-d', strtotime($value)); } if (!empty($value2)) { $value2 = date('Y-m-d', strtotime($value2)); } } else { if ($field['f_type'] == 30) { // Время if (!empty($value)) { $value = date('H:i:s', strtotime($value)); } if (!empty($value2)) { $value2 = date('H:i:s', strtotime($value2)); } } else { if ($field['f_type'] == 32) { // Дата и Время if (!empty($value)) { $value = date('Y-m-d H:i:s', strtotime($value)); } if (!empty($value2)) { $value2 = date('Y-m-d H:i:s', strtotime($value2)); } } } } if (isset($value2)) { if ($value !== '' && $value2 === '') { $sel->where($fname, '>=', $value); } else { if ($value === '' && $value2 !== '') { $sel->where($fname, '<=', $value2); } else { if ($value !== '' && $value2 !== '') { $sel->where($fname, 'BETWEEN', $value, $value2); } } } } else { $sel->where($fname, '=', $value); } $is_filtered = true; } else { if (is_numeric($value) || isset($value2) && is_numeric($value2)) { // Числовые поля if (isset($value2)) { if ($value !== '' && $value2 === '') { $sel->where($fname, '>=', $value); } else { if ($value === '' && $value2 !== '') { $sel->where($fname, '<=', $value2); } else { if ($value !== '' && $value2 !== '') { $sel->where($fname, 'BETWEEN', $value, $value2); } } } } else { $sel->where($fname, '=', $value); } $is_filtered = true; } else { if (!empty($value)) { // Текстовые поля $sel->where($fname, 'LIKE', '%' . $value . '%'); $is_filtered = true; } } } } } } } } } } } } // print_R($_SESSION); return $is_filtered; }