«Цена по запросу» — стандартный сценарий для B2B и дилерских магазинов, где розничная стоимость не публикуется. В 1С-Битрикс это решается не хардкодом в шаблоне, а правами доступа к типам цен: гость просто не имеет прав на просмотр цены, а шаблон каталога аккуратно подменяет её на форму заявки.
Как Битрикс решает, показывать цену или нет
В 1С-Битрикс видимость цены определяется не отдельной галочкой «скрыть», а правами доступа к типу цены. Каждый тип цены (розница, опт, дилер) имеет список групп пользователей с правами «Просмотр» и «Покупка». Компонент каталога запрашивает цены через CCatalogGroup и CPrice, и в выборку попадают только те типы, к которым у текущего пользователя есть доступ.
Неавторизованный посетитель принадлежит к системной группе «Все пользователи (в том числе неавторизованные)» с идентификатором 2. Если у этой группы нет права на просмотр ни одного из типов цен, использованных в свойстве компонента PRICE_CODE, то массив цен товара приходит пустым — и шаблону остаётся показать «Цена по запросу».
display:none — цену не видно ни в HTML, ни в исходном коде страницы, ни в микроразметке.Настройка прав на просмотр цены
Права задаются в разделе Магазин → Настройки → Группы цен (в старых версиях — «Типы цен»). Откройте нужный тип цены и на вкладке «Права доступа» снимите у группы «Все пользователи (в том числе неавторизованные)» право на просмотр и покупку.
- Перейдите в список типов цен и откройте, например, «Розничная цена».
- В блоке прав уберите группу с ID
2из тех, кому разрешён просмотр. - Оставьте просмотр только зарегистрированным группам: «Зарегистрированные пользователи», «Оптовики», «Дилеры».
- Сохраните и очистите кэш каталога (
Настройки → Автокэшированиеили сброс кэша компонентов).
После этого гость на карточке товара и в списке каталога не увидит числовой цены. Для авторизованного клиента, входящего в разрешённую группу, цена отобразится как обычно. Такой подход хорош тем, что управляется через штатный механизм прав и не ломается при обновлениях.
2 остались снятыми.Вывод «Цена по запросу» в шаблоне
Когда цена недоступна, компоненты bitrix:catalog.section и bitrix:catalog.element отдают пустые ценовые поля. В шаблоне проверяйте наличие цены и подменяйте её текстом и кнопкой заявки. Ориентируйтесь на MIN_PRICE или массив PRICES элемента:
- если
empty($arItem['MIN_PRICE'])— выводим «Цена по запросу» и кнопку «Узнать цену»; - кнопку «В корзину» / «Купить» в этом случае скрываем — заказать товар без цены нельзя;
- правку делаем в копии шаблона в
/local/templates/…/components/bitrix/catalog.section/…/template.php, а не в ядре.
Логику удобно вынести в result_modifier.php: там добавить в каждый элемент флаг PRICE_ON_REQUEST, а сам template.php оставить чистым. Не забудьте про блок цен в «умном фильтре» и в компоненте сравнения — там цена тоже может протекать.
Форма «Узнать цену» и обработка заявки
Кнопка «Цена по запросу» должна вести к целевому действию, а не в пустоту. Варианты реализации в порядке роста удобства:
| Способ | Инструмент | Когда подходит |
|---|---|---|
| Веб-форма | Модуль form (Веб-формы) | Быстрый старт, письма менеджеру |
| Заявка в CRM | Модуль crm / CRM-форма | Битрикс24, воронка лидов |
| Свой AJAX-обработчик | Компонент main.mail.event | Кастомная логика, интеграции |
В форму обязательно передавайте скрытым полем артикул или ID товара — иначе менеджер не поймёт, о какой позиции речь. Открывайте её в модальном окне прямо на карточке, чтобы посетитель не терял контекст. Хороший тон — дублировать заявку в почту и в CRM, чтобы она не потерялась.
Показ цены только после авторизации
Частая B2B-схема: гостю — «по запросу», а после входа в личный кабинет — реальная цена его группы. Механика та же (права типов цен), но добавляется удобная навигация:
- рядом с «Цена по запросу» показывайте ссылку «Войдите, чтобы увидеть цену»;
- группу клиента после регистрации назначайте автоматически — вручную через
Настройки → Пользователи → Группыили правилами при подтверждении договора; - для дилеров с разными ценами заведите отдельные типы цен и группы, привязав их правами (см. настройку оптовых цен).
SEO, микроразметка и типичные ошибки
Скрытие цены влияет на выдачу и агрегаторы, поэтому проверьте несколько мест, где цена может «утечь» или, наоборот, сломать разметку:
- Микроразметка Schema.org — при отсутствии цены не выводите пустой
<meta itemprop="price">, иначе получите ошибку в валидаторе; для «по запросу» корректнее указыватьavailabilityбезprice. - Выгрузки в Яндекс.Маркет / фиды — товары без цены исключайте из YML, а не отдавайте с нулём.
- Кэш — после смены прав обязателен сброс кэша компонентов, иначе старая цена ещё какое-то время показывается гостям.
- Кнопка «Купить» — не забудьте скрыть её и в быстром просмотре, и в блоке «С этим товаром покупают».
Самая частая ошибка — спрятать цену только в шаблоне через CSS. Тогда значение остаётся в HTML и микроразметке, и любой желающий увидит его в исходном коде. Скрытие через права типов цен закрывает этот риск полностью.
Итог
Правильная «цена по запросу» в 1С-Битрикс строится на двух уровнях: правами доступа к типам цен вы физически убираете стоимость из данных для группы «неавторизованные», а в шаблоне каталога аккуратно подменяете пустую цену на текст и форму заявки. Такой способ безопаснее CSS-скрытия, переживает обновления и обмен с 1С, а также легко расширяется до схемы «цена только после входа».
Если нужно внедрить это без риска сломать каталог, корзину и микроразметку — мы в B2Bsite настраиваем права типов цен, дорабатываем шаблоны и подключаем формы заявок с выгрузкой в CRM, а также следим, чтобы обмен с 1С не сбрасывал настройки. Поможем спроектировать и B2B-логику с персональными ценами по группам клиентов.
Частые вопросы
Как скрыть цену от неавторизованных пользователей в Битрикс?
Откройте нужный тип цены в разделе Магазин → Настройки → Группы цен и снимите право просмотра у группы «Все пользователи (в том числе неавторизованные)» с ID 2. После сброса кэша цена перестанет попадать в данные шаблона для гостей.
Где вывести текст «Цена по запросу»?
В шаблоне компонента каталога проверьте, что цена пустая (например, MIN_PRICE), и подмените её на текст и кнопку заявки. Правку делайте в копии шаблона в /local/templates, а не в ядре.
Нужно ли скрывать кнопку «Купить» вместе с ценой?
Да. Без цены оформить заказ нельзя, поэтому кнопку «В корзину» скрывают, а вместо неё показывают «Узнать цену». Проверьте также быстрый просмотр и блоки рекомендаций.
Достаточно ли спрятать цену через CSS?
Нет. При скрытии через CSS значение остаётся в HTML и микроразметке, и его видно в исходном коде. Надёжно скрыть цену можно только через права типов цен, когда её нет в самих данных.
Как показать цену только после авторизации?
Оставьте право просмотра типа цены только зарегистрированным группам и назначайте их клиентам после регистрации. Гость увидит «по запросу», а вошедший клиент — цену своей группы.
Сбросит ли обмен с 1С настройки прав на цены?
Обмен CommerceML сам права типов цен не меняет, но при рассинхроне идентификаторов может пересоздать тип цены. После крупных изменений в 1С проверьте, что права у группы с ID 2 остались снятыми.
Как передать менеджеру, о каком товаре заявка?
В форме «Узнать цену» добавьте скрытое поле с ID или артикулом товара и подставляйте его на карточке. Иначе в заявке не будет понятно, о какой позиции идёт речь.
Что делать с товарами без цены в выгрузках и микроразметке?
Товары без цены исключайте из YML-фидов, а не отдавайте с нулём, и не выводите пустой itemprop="price" в Schema.org, чтобы не получить ошибку валидатора.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.