Если после обновления 1С-Битрикс вы столкнулись с ситуацией, когда на детальной странице товара цены и кнопка покупки отображаются нормально, а в списке товаров (категории, разделы, поиск, главная) они исчезли — эта статья для вас. Проблема массовая и типичная, особенно для пользователей популярных шаблонов Aspro (Next, Max, Шины и Диски 2.0) .
Мы разберем причины, покажем точные пути к файлам и предоставим проверенные примеры кода.
Симптомы: как выглядит проблема
Вы можете наблюдать следующую картину :
-
В категории товаров нет цен, нет кнопки «В корзину». Блок с ценой может быть скрыт через
display: noneили просто отсутствовать в HTML-коде. -
При этом на странице самого товара всё работает идеально — цена есть, кнопка работает.
-
В быстром просмотре товара (который обычно открывается в модальном окне) цены тоже отображаются корректно.
-
Если временно переключить шаблон сайта на стандартный (например,
.default), цены в списке появляются. Это ключевой признак того, что проблема именно в вашем рабочем шаблоне. -
В консоли браузера (F12) могут быть ошибки, связанные с
BX is not definedилиHistory.js, но их устранение стандартными методами (очистка кеша, подключение ядра) не возвращает цены.
Техническая причина: изменения в ядре Битрикс
Что изменилось в версии 23.300.0?
Начиная с версии 1С-Битрикс 23.300.0, в работе компонентов каталога произошли кардинальные изменения .
Раньше (до версии 23.300.0):
Компоненты catalog.section (список товаров) и catalog.element (детальная карточка) по умолчанию формировали в массиве $arResult старые, привычные для разработчиков поля:
-
$arResult["PRICES"]— массив с ценами. -
$arResult["MIN_PRICE"]— минимальная цена. -
$arResult["CATALOG_AVAILABLE"]— наличие товара.
После обновления до 23.300.0+:
Эти поля перестали формироваться по умолчанию . Вместо них компоненты начали использовать новый, более производительный формат данных — $arResult["ITEM_PRICES"]. Это сделано для оптимизации скорости работы.
Пример структуры старого и нового формата данных о цене :
Старый формат (до обновления) — доступен только с COMPATIBLE_MODE=Y:
[PRICES] => Array
(
[1] => Array
(
[PRICE_ID] => 1
[ID] => 826
[CAN_ACCESS] => Y
[CAN_BUY] => Y
[VALUE] => 80
[DISCOUNT_VALUE] => 80
[PRINT_VALUE] => 80 руб.
[PRINT_DISCOUNT_VALUE] => 80 руб.
)
)Новый формат (после обновления):
[ITEM_PRICES] => Array
(
[0] => Array
(
[PRICE_TYPE_ID] => 1
[BASE_PRICE] => 80
[PRICE] => 80
[CURRENCY] => RUB
[DISCOUNT] => 0
[PRINT_PRICE] => 80 руб.
[RATIO_PRICE] => 80
)
)Почему сломались именно шаблоны Aspro?
Популярные шаблоны Aspro (Next, Max) были написаны до этого изменения. Их код продолжает искать в $arResult старые поля (PRICES, MIN_PRICE). Так как после обновления они перестали приходить, шаблон не находит данные и не выводит цену и кнопку .
Почему на детальной странице и в быстром просмотре цена есть?
Потому что там используются другие компоненты (catalog.element или специальные компоненты Aspro), которые либо уже адаптированы, либо используют иные механизмы получения цен, не сломавшиеся при обновлении.
Решение: включаем режим совместимости
Что такое COMPATIBLE_MODE?
Это параметр компонентов каталога, который заставляет их работать в старом, совместимом режиме. Когда он установлен в значение Y, компонент дополнительно формирует в $arResult все старые поля (PRICES, MIN_PRICE и т.д.), которые ожидают увидеть шаблоны Aspro .
Важный факт: На форуме разработчиков 1С-Битрикс официально подтверждено, что ключ PRICE формируется только при включении режима совместимости ('COMPATIBLE_MODE' => 'Y'), и рекомендуется переходить на новый формат, но для быстрого решения подходит включение совместимости .
Пошаговая инструкция по добавлению параметра
Вам нужно найти все места в шаблоне, где вызываются компоненты catalog.section, catalog.element и catalog.top, и добавить в их параметры строку "COMPATIBLE_MODE" => "Y".
Где искать файлы в Aspro Next / Max
На основе анализа типовой структуры шаблонов Aspro и найденных решений, вот точные пути к файлам (для Aspro Max пути могут быть аналогичными, с заменой aspro_next на aspro_max) :
Для списка товаров в категории (catalog.section):
-
/bitrix/templates/aspro_next/components/bitrix/catalog/main/page_blocks/list_elements_1.php(строка ~365) -
/bitrix/templates/aspro_next/components/bitrix/sale.gift.main.products/main/template.php(строка ~42)
Для детальной страницы товара (catalog.element):
-
/bitrix/templates/aspro_next/components/bitrix/catalog/main/page_blocks/element_1.php(строка ~9) -
/bitrix/templates/aspro_next/components/bitrix/catalog/main/page_blocks/element_2.php(строка ~10) -
/bitrix/templates/aspro_next/components/bitrix/catalog/main/page_blocks/element_3.php(строка ~12) -
/bitrix/templates/aspro_next/components/bitrix/catalog/main/page_blocks/element_4.php(строка ~14) -
/bitrix/templates/aspro_next/components/bitrix/catalog/main/page_blocks/element_5.php(строка ~18) -
/bitrix/templates/aspro_next/components/bitrix/catalog/main/page_blocks/fast_view_1.php(строка ~5) — обратите внимание: здесь у вас уже работает, но параметр тоже стоит добавить для единообразия.
Для страницы поиска (catalog.section):
-
/bitrix/templates/aspro_next/components/bitrix/catalog.search/main/template.php(строка ~673)
Для товаров на главной странице:
-
/include/mainpage/components/catalog_tab/type_1.php(строка ~10) -
/include/mainpage/components/catalog_tab/type_2.php(строка ~10)
Пример кода: что и куда добавлять
В каждом из указанных файлов найдите вызов компонента. Выглядит он примерно так:
<?$APPLICATION->IncludeComponent(
"bitrix:catalog.section",
"main",
array(
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"PRICE_CODE" => $arParams["PRICE_CODE"],
"BASKET_URL" => $arParams["BASKET_URL"],
// ... много других параметров
),
$component
);?>
Вам нужно добавить новую строку с параметром "COMPATIBLE_MODE" => "Y" в начало массива параметров (или в любое место, но лучше в начало для наглядности) .
Было:
array(
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"PRICE_CODE" => $arParams["PRICE_CODE"],
// ...
)Стало:
array(
"COMPATIBLE_MODE" => "Y", // ← вот эта строка
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"PRICE_CODE" => $arParams["PRICE_CODE"],
// ...
)После внесения изменений сохраните файлы и обязательно очистите все кеши:
-
Кеш сайта:
Настройки → Очистка кеша. -
Кеш браузера (Ctrl+F5 или Cmd+Shift+R).
Почему это решение работает: подтверждения из практики
-
Подтверждение от разработчиков: На официальном форуме 1С-Битрикс пользователи подтверждают, что после добавления параметра
COMPATIBLE_MODEв простые компоненты (catalog.section) проблема решается: "Прописал, все заработало!" . -
Опыт владельцев сайтов: В блогах и на форумах описываются идентичные случаи: "После обновления Битрикс на сайте пропадают цены, наличие и другие показатели каталога товаров... Для его включения теперь в параметрах компонента установить галочку для соответствующего пункта. Или в коде вызова компонента явно указать параметр COMPATIBLE_MODE в состояние Y" .
-
Специфика Aspro: Пользователи шаблонов Aspro (Шины и Диски 2.0, Максимум) прямо указывают на эту причину: "Это прикол Битрикс после одного из обновлений. Решение здесь..." и ссылаются на базу знаний Aspro . Другой источник подтверждает: *"С обновлением 1С-Битрикс 23.300.0 в компонентах каталога по умолчанию был выключен параметр COMPATIBLE_MODE. Проблема актуальна в кастомных шаблонах для детальных страниц и списков элементов"* .
Альтернативный метод (если не хотите править код)
Если вы не хотите вносить правки в код шаблона, в некоторых редакциях Битрикса параметр COMPATIBLE_MODE можно включить через визуальный интерфейс при редактировании компонента .
-
Зайдите на страницу со списком товаров.
-
Включите режим правки и нажмите на шестеренку компонента
catalog.section. -
Найдите вкладку "Дополнительные параметры" или "Настройки компонента".
-
Найдите чекбокс "Режим совместимости" (Compatible mode) и установите его.
-
Сохраните настройки.
Заключение
Проблема с исчезновением цен в списках товаров после обновления Битрикс версии 23.300.0 — это следствие изменения логики работы компонентов каталога и отключения режима совместимости по умолчанию. Шаблоны Aspro, не адаптированные под новый формат данных, перестают получать информацию о ценах.
Решение — добавить параметр "COMPATIBLE_MODE" => "Y" в вызовы компонентов catalog.section, catalog.element и catalog.top в файлах шаблона Aspro. Это заставляет компоненты формировать старые массивы данных (PRICES, MIN_PRICE), которые ожидает шаблон, и цены с кнопками возвращаются на свои места.
Не забудьте всегда делать резервные копии файлов перед внесением изменений!