🔧 Отладка фильтра шин (1С-Битрикс)
Пошаговое исправление проблемы с пропажей типоразмеров и шин
🛑 Типичные ошибки $arFilter
PROPERTY_SIZE => '205/55R16'вместоPROPERTY_SIZE_VALUE => '205/55R16'(для строковых свойств)- Фильтрация по текстовому значению списка вместо ID значения
- Отсутствие
'IBLOCK_ID' => Xили'ACTIVE' => 'Y' - Использование
!PROPERTY_...когда нужноPROPERTY_... - Мультивыборка передана строкой, а не массивом
🧪 Проверка свойств в админке
Перейдите: Контент → Инфоблоки → Типы → Свойства
Убедитесь, что:
- «Размер» → Тип: Строка (или Список с мультивыборкой)
- «Марка/Модель» → Тип: Список или Привязка к элементам
- «Сезонность» → Тип: Список (Значения: summer, winter, all)
🔧 Правильный синтаксис $arFilter
📊 Логирование запроса
$res = CIBlockElement::GetList(
[],
$arFilter,
false,
false,
['ID', 'NAME', 'PROPERTY_SIZE', 'PROPERTY_SEASON', 'PROPERTY_CAR_MODEL']
);
echo '';
echo "SQL: ".CIBlockElement::GetSQL($arFilter, [])."
";
echo "Записей: ".$res->SelectedCount();
echo '
';
die();
📦 component.php / result_modifier.php
Вставьте перед вызовом GetList для отладки:
// 1. Вывод входящих данных
$debugData = [
'GET' => $_GET,
'POST' => $_POST,
'FILTER' => $arFilter,
'USER' => $USER->GetID()
];
file_put_contents(
$_SERVER['DOCUMENT_ROOT'].'/bitrix/tire_filter_debug.log',
"[".date('Y-m-d H:i:s')] ".print_r($debugData, true)."\n",
FILE_APPEND
);
// 2. Проверка прав доступа и активности
$arFilter['CHECK_PERMISSIONS'] = 'N'; // если фильтр админский/общий
$arFilter['ACTIVE'] = 'Y';
$arFilter['IBLOCK_ID'] = 5; // ОБЯЗАТЕЛЬНО
🔗 Шаблон фильтра для шин
$arFilter = [
'IBLOCK_ID' => 5,
'ACTIVE' => 'Y',
'CHECK_PERMISSIONS' => 'N'
];
// Авто (привязка к элементам)
if (!empty($carId)) {
$arFilter['PROPERTY_CAR_REF'] = $carId;
}
// Сезон (список)
if ($season !== 'all' && $season) {
$arFilter['PROPERTY_SEASON'] = $season;
}
// Диаметр (число/строка)
if ($diameter) {
$arFilter['PROPERTY_SIZE_VALUE'] = '%R'.$diameter;
// Или точное совпадение, если свойство нормализовано:
// $arFilter['?PROPERTY_DIAMETER'] = (int)$diameter;
}
// Пагинация без потерь
$rs = CIBlockElement::GetList(
['SORT' => 'ASC'],
$arFilter,
false,
['nTopCount' => 1000], // или bShowAll => true в компоненте
$arSelect
);
🧹 Очистка кэша
- Админка:
Настройки → Настройки продукта → Автоочистка кэша → Очистить кэш файлов - Папки:
/bitrix/cache/,/bitrix/managed_cache/,/bitrix/html_cache/ - В компоненте:
CACHE_TYPE => 'N'на время отладки
// Принудительный сброс кэша фильтра
if (defined('DEBUG_FILTER') && DEBUG_FILTER) {
$CACHE_MANAGER->CleanDir('iblock_cache_'.md5(serialize($arFilter)));
$CACHE_MANAGER->CleanDir('menu_cache');
}
🌐 AJAX-обработчик (filter_ajax.php)
Частая ошибка: $_GET не ловит данные из POST-запроса компонента.
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("iblock");
// Правильный парсинг
$request = \Bitrix\Main\Context::getCurrent()->getRequest();
$filters = $request->getPost('filter') ?: $request->getQuery('filter');
$arFilter = [
'IBLOCK_ID' => 5,
'ACTIVE' => 'Y'
];
if (!empty($filters['brand'])) $arFilter['PROPERTY_BRAND'] = $filters['brand'];
if (!empty($filters['model'])) $arFilter['PROPERTY_MODEL'] = $filters['model'];
if (!empty($filters['size'])) $arFilter['PROPERTY_SIZE_VALUE'] = $filters['size'];
// Ответ JSON
Header('Content-Type: application/json');
echo json_encode(['status' => 'ok', 'count' => CIBlockElement::GetList([], $arFilter, true)]);
die();
✅ Чек-лист: почему пропадают шины
- В
$arFilterуказанIBLOCK_IDиACTIVE => 'Y' - Для свойств типа «Список» фильтрация идёт по ID значения, а не по тексту
- Для строковых свойств используется
PROPERTY_CODE_VALUEили точное совпадение - Свойство «Подходит для авто» имеет тип [мн:Привязка] или [мн:Список], иначе вернётся только 1 авто
- В AJAX-обработчике используется
$_REQUESTилиBitrix\Main\Context, а не только$_GET - Параметр
CACHE_TYPE => 'N'установлен на время тестов - Не используется
nTopCountилиbShowAll, и пагинация обрезает результат - В
result_modifier.phpнет вывода$arResult['DEBUG_FILTER']для проверки входящих данных
🔍 Быстрая команда для терминала (Bitrix VM)
# 1. Просмотр логов фильтра
tail -f bitrix/tire_filter_debug.log
# 2. Очистка кэша инфоблоков
rm -rf bitrix/cache/iblock/*
rm -rf bitrix/managed_cache/M5/*
# 3. Проверка SQL запросов в реальном времени
echo 'define("LOG_SQL", true);' >> bitrix/php_interface/init.php