Setting Up Hidden Prices (Price on Request) in 1C-Bitrix
Wholesale customer enters catalog, sees retail price and leaves — thinking it's expensive. Or competitor monitors prices via scraper. Hiding prices with "Get price" button solves both: B2B customer leaves request, scraper gets empty field instead of number.
Price Hiding Architecture
In 1C-Bitrix, product price stored in b_catalog_price table and bound to price type (b_catalog_group). Hide price at several levels:
Component template level. Simplest variant — in template.php of catalog.element component check condition and output button instead of price. Conditions: user group, infoblock property HIDE_PRICE, presence of certain price type.
Price type level. Create separate price type "On Request" in Store → Settings → Price Types. For products with hidden price, don't assign retail price. Component catalog.element on CCatalogProduct::GetOptimalPrice() call doesn't find available price — you handle this case in template.
Infoblock property level. Add PRICE_ON_REQUEST property type "List" (Yes/No). In component template check property value and replace price block with request form.
Implementation of "Get Price" Button
Button should open form with minimum fields: name, phone/email, auto-filled product SKU. Implementation variants:
-
bitrix:form.result.newcomponent — standard web form. Pass product ID and name to GET parameters. In form template — hidden fields with product data. -
Popup via
BX.SidePanel— opens iframe with form. Faster for user, doesn't leave page. -
AJAX request to custom endpoint in
/local/ajax/— minimal form without reload.
Request should go to CRM (if Bitrix24) or email to manager. For CRM use crm.lead.add via REST API or OnAfterResultAdd web form event with lead creation handler.
Hiding Prices by User Groups
For B2B scenario: authorized dealers see price, guests — request button. Check via $USER->GetUserGroupArray() in component template. Or via price type access rights — in price type settings set which user groups have access. Method CCatalogGroup::GetGroupsList() returns allowed groups.
| Scenario | Approach | Setup Time |
|---|---|---|
| Hide for all, "Get price" button | Infoblock property + template rework | 2–4 hours |
| Hide for guests, show for dealers | Price type rights + group check | 4–6 hours |
| Bulk management (1000+ products) | Property + CSV/1C import | 1–2 days |







