В каталоге товаров на 1С-Битрикс умный фильтр может автоматически выводить диапазон цен. Обычно он выглядит как два поля «от» и «до» или как ползунок, с помощью которого посетитель может ограничить стоимость товаров.
Однако фильтрация по цене нужна не всегда. Например:
- цена товара рассчитывается индивидуально;
- на сайте используется кнопка «Запросить стоимость»;
- товары предоставляются в аренду;
- стоимость хранится не в типе цены каталога, а в отдельном свойстве инфоблока;
- цена зависит от комплектации, срока аренды или других условий;
- в каталоге не требуется сортировка и фильтрация по стоимости.
Разберём, как убрать цену только из умного фильтра, сохранив её вывод в списке товаров и на детальной странице.
Почему цена появляется в умном фильтре
Фильтрация по цене подключается через параметр PRICE_CODE компонента:
bitrix:catalog.smart.filterОбычно при вызове умного фильтра используется значение, переданное из настроек комплексного компонента каталога:
"PRICE_CODE" => $arParams["PRICE_CODE"],
Массив $arParams["PRICE_CODE"] содержит типы цен, используемые на сайте. Например:
array(
"BASE",
)Если передать этот массив в умный фильтр, компонент сформирует фильтрацию по цене.
Почему нельзя очищать PRICE_CODE во всём каталоге
Параметр PRICE_CODE используется не только умным фильтром. Он также передаётся в компоненты:
bitrix:catalog.section— список товаров;bitrix:catalog.element— детальная карточка;- компоненты рекомендаций и похожих товаров;
- компоненты подарков;
- компоненты сравнения товаров.
Если полностью удалить тип цены из настроек каталога, цена может исчезнуть:
- из карточек товаров;
- из разделов каталога;
- из торговых предложений;
- из корзины и связанных компонентов.
Поэтому нужно отключить передачу типов цен только при вызове умного фильтра.
В каком файле искать вызов умного фильтра
Вызов компонента bitrix:catalog.smart.filter обычно находится в шаблоне комплексного компонента каталога.
В рассматриваемом случае файл называется:
section_vertical.phpТакое название часто используется в шаблонах, где фильтр выводится вертикально — например, в левой колонке каталога.
Однако в других проектах файл может называться иначе.
Возможные названия файлов
section.php;section_vertical.php;section_horizontal.php;section_filter.php;catalog_section.php;smart_filter.php;filter.php;filter_vertical.php;left_block.php;sidebar.php;sections.php;section_blocks.php.
В некоторых шаблонах вызов фильтра вынесен во вложенную папку:
include/filter.php
include/smart_filter.php
include/section_filter.php
include/left_block.phpПоэтому ориентироваться лучше не только на имя файла, а на сам вызов компонента.
Где обычно располагается файл
Если используется кастомный шаблон сайта, возможный путь выглядит так:
/local/templates/имя_шаблона/components/bitrix/catalog/имя_шаблона_каталога/section.phpДля вертикального варианта:
/local/templates/имя_шаблона/components/bitrix/catalog/имя_шаблона_каталога/section_vertical.php
Если переопределение находится не в /local/, а в старой структуре проекта, путь может выглядеть так:
/bitrix/templates/имя_шаблона/components/bitrix/catalog/имя_шаблона_каталога/section_vertical.phpРедактировать файлы ядра в каталоге:
/bitrix/components/bitrix/не рекомендуется. После обновления 1С-Битрикс изменения могут быть потеряны.
Как быстро найти вызов умного фильтра
В файлах шаблона нужно искать строку:
bitrix:catalog.smart.filterВызов обычно выглядит примерно так:
<?php
$APPLICATION->IncludeComponent(
"bitrix:catalog.smart.filter",
$templateName,
array(
"IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"SECTION_ID" => $arCurSection["ID"],
"FILTER_NAME" => $arParams["FILTER_NAME"],
"PRICE_CODE" => $arParams["PRICE_CODE"],
"CACHE_TYPE" => $arParams["CACHE_TYPE"],
"CACHE_TIME" => $arParams["CACHE_TIME"],
),
$component
);
?>Нас интересует эта строка:
"PRICE_CODE" => $arParams["PRICE_CODE"],Как отключить фильтрацию по цене
Для отключения цены только в умном фильтре нужно заменить:
"PRICE_CODE" => $arParams["PRICE_CODE"],на пустой массив:
"PRICE_CODE" => array(),В современном синтаксисе PHP можно использовать сокращённую запись:
"PRICE_CODE" => [],Оба варианта равнозначны.
Пример полного вызова компонента
<?php
$APPLICATION->IncludeComponent(
"bitrix:catalog.smart.filter",
"",
array(
"IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"SECTION_ID" => $arCurSection["ID"],
"FILTER_NAME" => $arParams["FILTER_NAME"],
/*
* Не передаём типы цен в умный фильтр.
* Цена исчезнет из фильтра, но продолжит
* выводиться в карточках товаров.
*/
"PRICE_CODE" => array(),
"CACHE_TYPE" => $arParams["CACHE_TYPE"],
"CACHE_TIME" => $arParams["CACHE_TIME"],
"CACHE_GROUPS" => $arParams["CACHE_GROUPS"],
"SAVE_IN_SESSION" => "N",
"INSTANT_RELOAD" => "N",
"PAGER_PARAMS_NAME" => "arrPager",
),
$component,
array(
"HIDE_ICONS" => "Y",
)
);
?>Пример для файла section_vertical.php
В шаблонах с вертикальным фильтром код может выглядеть так:
<?php
if ($arParams["USE_FILTER"] === "Y") {
$APPLICATION->IncludeComponent(
"bitrix:catalog.smart.filter",
"vertical",
array(
"IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"SECTION_ID" => $arCurSection["ID"],
"FILTER_NAME" => $arParams["FILTER_NAME"],
// Раньше:
// "PRICE_CODE" => $arParams["PRICE_CODE"],
// Теперь:
"PRICE_CODE" => array(),
"CACHE_TYPE" => $arParams["CACHE_TYPE"],
"CACHE_TIME" => $arParams["CACHE_TIME"],
"CACHE_GROUPS" => $arParams["CACHE_GROUPS"],
"SAVE_IN_SESSION" => "N",
"INSTANT_RELOAD" => "Y",
),
$component
);
}
?>Если используется отдельный параметр FILTER_PRICE_CODE
В некоторых готовых решениях и кастомных шаблонах для фильтра используется отдельный параметр:
FILTER_PRICE_CODEТогда вызов может выглядеть так:
"PRICE_CODE" => $arParams["FILTER_PRICE_CODE"],Его также можно заменить пустым массивом:
"PRICE_CODE" => array(),При этом основной параметр:
$arParams["PRICE_CODE"]трогать не нужно.
Если PRICE_CODE передаётся через промежуточную переменную
Иногда параметры сначала собираются в отдельный массив:
$filterParams = array(
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"SECTION_ID" => $arCurSection["ID"],
"PRICE_CODE" => $arParams["PRICE_CODE"],
);После этого массив передаётся компоненту:
$APPLICATION->IncludeComponent(
"bitrix:catalog.smart.filter",
"",
$filterParams,
$component
);В таком случае изменить нужно строку внутри массива:
$filterParams["PRICE_CODE"] = array();Либо сразу указать пустой массив:
$filterParams = array(
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"SECTION_ID" => $arCurSection["ID"],
"PRICE_CODE" => array(),
);Если умный фильтр подключается несколько раз
В некоторых шаблонах имеются отдельные вызовы для:
- десктопной версии;
- мобильной версии;
- вертикального фильтра;
- горизонтального фильтра;
- всплывающего мобильного окна.
Например:
section_vertical.php
section_horizontal.php
mobile_filter.phpЕсли изменить только один вызов, цена может исчезнуть на компьютере, но остаться в мобильной версии.
Поэтому рекомендуется выполнить поиск по всему шаблону каталога:
bitrix:catalog.smart.filterи проверить все найденные вызовы.
Почему не стоит просто скрывать цену через CSS
Иногда блок цены пытаются убрать стилями:
.bx-filter-parameters-box-price {
display: none;
}Такой подход нежелателен.
Причины:
- HTML блока цены всё равно загружается;
- параметры фильтра продолжают участвовать в работе компонента;
- могут остаться скрытые поля;
- классы зависят от конкретного шаблона;
- после обновления или смены шаблона CSS может перестать работать;
- в мобильной версии может использоваться другой класс.
Правильнее не передавать типы цен в компонент умного фильтра.
Что делать после изменения
После редактирования файла необходимо очистить кеш.
- Открыть административную часть сайта.
- Перейти в раздел очистки кеша.
- Очистить кеш компонентов.
- При необходимости очистить весь кеш сайта.
- Если используется композитный режим, очистить композитный кеш.
- Перезагрузить страницу каталога без кеша браузера.
Для принудительной перезагрузки страницы можно использовать сочетание клавиш:
Ctrl + F5Что проверить после изменения
- исчез ли диапазон цены из умного фильтра;
- остались ли цены в списке товаров;
- осталась ли цена на детальной странице;
- работают ли остальные свойства фильтра;
- не осталась ли цена в мобильной версии;
- не подключается ли второй экземпляр умного фильтра;
- работает ли фильтрация после применения других параметров.
Если цена не исчезла
Если после замены PRICE_CODE цена осталась, возможны следующие причины:
- изменён не тот файл шаблона;
- на странице используется другой вариант, например
section_horizontal.php; - имеется отдельный вызов мобильного фильтра;
- не очищен кеш компонента;
- фильтр выводит не каталожную цену, а числовое свойство инфоблока;
- блок цены прописан в шаблоне вручную;
- готовое решение модифицирует параметры через
result_modifier.phpили другой подключаемый файл.
Для диагностики нужно проверить фактический вызов:
bitrix:catalog.smart.filterи убедиться, что в нём действительно передаётся:
"PRICE_CODE" => array(),Если фильтр создаётся по числовому свойству
Иногда стоимость хранится не в каталожной цене, а в свойстве инфоблока, например:
PRICE
PRICE_ARENDA
COST
RENT_PRICE
Если для такого свойства установлена галочка «Показывать в умном фильтре», оно будет выводиться независимо от параметра PRICE_CODE.
В этом случае нужно открыть настройки свойства инфоблока и отключить его участие в умном фильтре.
Путь обычно выглядит так:
Контент
→ Инфоблоки
→ Тип инфоблока
→ Нужный инфоблок
→ СвойстваВ настройках свойства необходимо снять соответствующую галочку, связанную с показом в умном фильтре.
Таким образом, нужно различать:
- каталожную цену, которая управляется параметром
PRICE_CODE; - числовое свойство инфоблока, которое управляется настройками самого свойства.
Чтобы убрать стандартную цену из умного фильтра 1С-Битрикс и сохранить её в карточках товаров, нужно изменить только параметр вызова компонента bitrix:catalog.smart.filter.
Было:
"PRICE_CODE" => $arParams["PRICE_CODE"],Стало:
"PRICE_CODE" => array(),Вызов может находиться в файлах:
section.php
section_vertical.php
section_horizontal.php
filter.php
smart_filter.php
left_block.php
sidebar.phpИскать нужно по строке:
bitrix:catalog.smart.filter
При этом основной параметр $arParams["PRICE_CODE"] каталога изменять не следует, иначе цена может исчезнуть из списка и детальной карточки товаров.
Важно сначала определить, откуда именно фильтр получает стоимость. Пустой PRICE_CODE отключает только каталожные типы цен, но не числовое свойство вроде PRICE_ARENDA, если для него включён показ в умном фильтре. Такая проверка источника данных помогает убрать только ненужный диапазон и не затронуть карточки товаров при доработке каталога на 1С-Битрикс.
bitrix:catalog.smart.filter и параметры шаблона при сопровождении интернет-магазина на 1С-Битрикс.



