$(document).ready(function() {
// 1. Инициализация Select2
$(".city").select2({
ajax: {
url: "/ajax.php?action=main&type=get_city",
type: "post",
dataType: 'json',
delay: 250,
data: function(params) {
return {
searchTerm: params.term
};
},
processResults: function(response) {
return {
results: response
};
},
cache: true
},
placeholder: "Выберите город",
allowClear: true
});
// 2. Переменные состояния
let selectedCity = null;
let selectedCategories = [];
// 3. Загрузка данных при старте (без фильтров)
loadArticles();
// 4. Обработчики событий
$('.city').on('change', function() {
selectedCity = $(this).val();
loadArticles();
});
$('.category').on('change', function() {
selectedCategories = $('.category:checked').map(function() {
return $(this).val();
}).get();
loadArticles();
});
// 5. Основная функция загрузки
function loadArticles() {
$.ajax({
url: '/ajax.php?action=main&type=get_data',
method: 'POST',
data: {
city: selectedCity || '', // Пустая строка вместо null
category: selectedCategories.length ? selectedCategories : ''
},
beforeSend: function() {
$('#filterResults').html('<div class="loading">Загрузка...</div>');
},
success: function(response) {
$('#filterResults').html(response);
},
error: function(xhr) {
console.error('Ошибка:', xhr.responseText);
}
});
}
});
// Обработка фильтров
$sql = "SELECT * FROM articles WHERE 1=1";
// Фильтр по городу
if (!empty($_POST['city'])) {
$city_id = (int)$_POST['city'];
$sql .= " AND city_id = {$city_id}";
}
// Фильтр по категориям (LIKE-версия)
if (!empty($_POST['category']) && is_array($_POST['category'])) {
$conditions = [];
foreach ($_POST['category'] as $cat) {
$safe_cat = mysqli_real_escape_string($conn, $cat);
$conditions[] = "p_categories LIKE '%{$safe_cat}%'";
}
if (!empty($conditions)) {
$sql .= " AND (" . implode(" OR ", $conditions) . ")";
}
}
// Выполнение запроса...
$(document).ready(function() {
$(".city").select2({
ajax: {
url: "/ajax.php?action=main&type=get_city",
type: "post",
dataType: 'json',
delay: 250,
data: function(params) {
return {
searchTerm: params.term
};
},
processResults: function(response) {
return {
results: response
};
},
cache: true
},
placeholder: "Выберите город",
allowClear: true
});
let selectedCity = null;
$('.city').on('select2:select', function(e) {
selectedCity = e.params.data.id;
console.log("Выбран город:", selectedCity);
getFilter(); // вызываем фильтрацию сразу при выборе города
});
// обработчик очистки выбора города
$('.city').on('select2:unselect', function() {
selectedCity = null;
console.log("Город сброшен");
getFilter();
});
function getFilter() {
let action = 'get_data';
let category = filterCategory('category');
$.ajax({
url: '/ajax.php?action=main&type=get_data',
method: 'POST',
data: {
action: action,
category: category,
city: selectedCity
},
success: function(response) {
$('#filterResults').html(response);
}
});
}
function filterCategory(classname) {
let filter = [];
$('.' + classname + ':checked').each(function() {
filter.push($(this).val());
});
return filter.length ? filter : null;
}
$('.filter_click').click(function() {
getFilter();
});
});
selectedCity
равен null
, поэтому серверная часть может считывать выбор только города все еще null