Файл 3 filter_option,php загрузка всех значений комплектов шин в массивы

Раздел: JavaScript

Темы: Файл 3 filter_option,php загрузка всех значений комплектов шин в массивы

Дата создания: 2024-09-19 21:48:44


0 ? 'AND ' . implode(' AND ', $conditions) : ''; return $where_clause; } // Функция для получения опций и их количеств для конкретного фильтра function get_options_with_counts($field, $exclude) { $where_clause = build_conditions($exclude); if ($field == 'marka') { $select_field = 'wc.marka'; $query = " SELECT $select_field AS value, COUNT(*) AS total_sets FROM wheel_cat_marka wc_m JOIN wheel_cat wc ON wc_m.name = wc.name JOIN wheel_select ws_front ON wc_m.uid1 = ws_front.uid JOIN wheel_select ws_rear ON wc_m.uid2 = ws_rear.uid WHERE wc.showcat = 'show' $where_clause GROUP BY $select_field ORDER BY $select_field DESC; "; } elseif ($field == 'type_en') { // Для типа шины получаем как type_en (для фильтрации), так и type (для отображения) // Включаем все возможные type_en, даже если count=0 $query = " SELECT wc.type_en AS value, wc.type AS label, COUNT(*) AS total_sets FROM wheel_cat wc LEFT JOIN wheel_cat_marka wc_m ON wc.name = wc_m.name LEFT JOIN wheel_select ws_front ON wc_m.uid1 = ws_front.uid LEFT JOIN wheel_select ws_rear ON wc_m.uid2 = ws_rear.uid WHERE wc.showcat = 'show' GROUP BY wc.type_en, wc.type ORDER BY wc.type DESC; "; // Если есть фильтры, добавляем условия if ($where_clause != '') { $query = " SELECT wc.type_en AS value, wc.type AS label, COUNT(*) AS total_sets FROM wheel_cat wc LEFT JOIN wheel_cat_marka wc_m ON wc.name = wc_m.name LEFT JOIN wheel_select ws_front ON wc_m.uid1 = ws_front.uid LEFT JOIN wheel_select ws_rear ON wc_m.uid2 = ws_rear.uid WHERE wc.showcat = 'show' $where_clause GROUP BY wc.type_en, wc.type ORDER BY wc.type DESC; "; } } elseif ($field == 'width_front') { $select_field = "ws_front.width"; $query = " SELECT DISTINCT $select_field AS value, COUNT(*) AS total_sets FROM wheel_cat_marka wc_m JOIN wheel_select ws_front ON wc_m.uid1 = ws_front.uid JOIN wheel_select ws_rear ON wc_m.uid2 = ws_rear.uid JOIN wheel_cat wc ON wc_m.name = wc.name WHERE wc.showcat = 'show' $where_clause GROUP BY $select_field ORDER BY $select_field DESC; "; } elseif ($field == 'width_rear') { $select_field = "ws_rear.width"; $query = " SELECT DISTINCT $select_field AS value, COUNT(*) AS total_sets FROM wheel_cat_marka wc_m JOIN wheel_select ws_front ON wc_m.uid1 = ws_front.uid JOIN wheel_select ws_rear ON wc_m.uid2 = ws_rear.uid JOIN wheel_cat wc ON wc_m.name = wc.name WHERE wc.showcat = 'show' $where_clause GROUP BY $select_field ORDER BY $select_field DESC; "; } else { $select_field = "wc_m.$field"; $query = " SELECT $select_field AS value, COUNT(*) AS total_sets FROM wheel_cat_marka wc_m JOIN wheel_select ws_front ON wc_m.uid1 = ws_front.uid JOIN wheel_select ws_rear ON wc_m.uid2 = ws_rear.uid JOIN wheel_cat wc ON wc_m.name = wc.name WHERE wc.showcat = 'show' $where_clause GROUP BY $select_field ORDER BY $select_field DESC; "; } $result = mysql_query($query); $options = []; while ($row = mysql_fetch_assoc($result)) { if ($field == 'type_en') { // Проверяем, существует ли данный type_en в текущих фильтрах if ($where_clause != '') { // Если условия фильтрации включают тип шины, учитываем только те, которые соответствуют $options[] = [ 'value' => $row['value'], 'label' => mb_convert_encoding($row['label'], 'UTF-8', 'CP1251'), 'total_sets' => isset($row['total_sets']) ? intval($row['total_sets']) : 0 ]; } else { // Если фильтров нет, отображаем все типы шины с их актуальными количествами $options[] = [ 'value' => $row['value'], 'label' => mb_convert_encoding($row['label'], 'UTF-8', 'CP1251'), 'total_sets' => intval($row['total_sets']) ]; } } else { $options[] = [ 'value' => $row['value'], 'total_sets' => intval($row['total_sets']) ]; } } // Для типа шины, если применяются фильтры, убедимся, что все возможные type_en включены if ($field == 'type_en' && $exclude == 'type_en') { // Получаем все возможные type_en из базы данных $all_types_query = " SELECT DISTINCT wc.type_en AS value, wc.type AS label FROM wheel_cat wc WHERE wc.showcat = 'show' ORDER BY wc.type DESC; "; $all_types_result = mysql_query($all_types_query); while ($type_row = mysql_fetch_assoc($all_types_result)) { $type_value = $type_row['value']; $type_label = mb_convert_encoding($type_row['label'], 'UTF-8', 'CP1251'); // Проверяем, присутствует ли этот тип в текущих опциях $found = false; foreach ($options as $opt) { if ($opt['value'] == $type_value) { $found = true; break; } } if (!$found) { // Добавляем этот тип с количеством 0 $options[] = [ 'value' => $type_value, 'label' => $type_label, 'total_sets' => 0 ]; } } } return $options; } // Функция для получения опций и их количеств для конкретного фильтра function get_options_with_counts_wrapper($field, $exclude) { return get_options_with_counts($field, $exclude); } // Получаем опции с учетом фильтров (для отображения количеств) $radius_options_with_counts = get_options_with_counts_wrapper('radius', 'radius'); $size_options_with_counts = get_options_with_counts_wrapper('size', 'size'); $marka_options_with_counts = get_options_with_counts_wrapper('marka', 'marka'); $type_options_with_counts = get_options_with_counts_wrapper('type_en', 'type_en'); $width_front_options_with_counts = get_options_with_counts_wrapper('width_front', 'width_front'); $width_rear_options_with_counts = get_options_with_counts_wrapper('width_rear', 'width_rear'); // Формируем массив данных для передачи в JavaScript $response = [ 'radius' => $radius_options_with_counts, 'size' => $size_options_with_counts, 'marka' => $marka_options_with_counts, 'type' => $type_options_with_counts, 'width_front' => $width_front_options_with_counts, 'width_rear' => $width_rear_options_with_counts, ]; // Закрытие соединения mysql_close($db); // Возвращаем данные в формате JSON echo json_encode($response); ?>

Вернуться на главную