🔧 Отладка фильтра шин (1С-Битрикс)

Пошаговое исправление проблемы с пропажей типоразмеров и шин

В Bitrix 90% ошибок фильтра связаны с неправильным синтаксисом $arFilter, типами свойств или кэшированием.

🛑 Типичные ошибки $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

Преимущества МАКСИШИНА

...
Безупречный сервис

Мы не просто продаём колёса — мы создаём комфорт на каждом этапе.

...
Профессиональный шиномонтаж

Наш шиномонтаж — это не просто услуга, а полный комфорт и уверенность в каждом километре.

...
Быстрая обработка заказов

Ваше время дорого — поэтому мы сделали запись на шиномонтаж максимально простой и удобной.

...
Широкий ассортимент

В нашем магазине – самый широкий ассортимент шин и дисков.

...
Профессиональное хранение

Сезон сменился, а ваши шины остались как новые? Мы заботимся о ваших колёсах круглый год.

...
Индивидуальный подход

Мы строим наш сервис вокруг вашего комфорта и доверия, превращая стандартное обслуживание в приятный опыт.

ОТЗЫВЫ НАШИХ КЛИЕНТОВ

Андрей

Отличный магазин! Заказал шины — доставка быстро, качество на высоте. Очень доволен

Сергей

Заказ оформил легко и быстро, доставка была своевременной. Буду обращаться еще!

Катя

Большой выбор дисков, цены приятные. Обслуживание на уровне, рекомендую.

Валя

Обслуживание на уровне, рекомендую. Большой выбор дисков, цены приятные.

УЗНАВАЙТЕ
О СКИДКАХ ПЕРВЫМИ
Онлайн
запись
Приветствуем вас! Сайт использует cookies. Продолжая пользоваться сайтом вы соглашаетесь с политикой конфиденциальности