Файл 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);
?>
Вернуться на главную