Сортировка по цене в каталоге с торговыми предложениями в 1С-Битрикс: Управление сайтом
В одном проекте мне потребовалось сделать сортировку по ценам, с учетом того, что в каталоге используются торговые предложения.
Сделать обычную сортировку (по названию, по дате добавления, по цене – если это торговый каталог, и так далее) не получится, поскольку нет прямого поля для сортировки. Поэтому введем в каталог с товарами два числовых поля в свойствах:
- Минимальная цена (MINIMUM_PRICE).
- Максимальная цена (MAXIMUM_PRICE).
В настройках компонента (для примера bitrix:catalog.section) укажем сортировку по минимальной цене:
"ELEMENT_SORT_FIELD" => "PROPERTY_MINIMUM_PRICE", "ELEMENT_SORT_ORDER" => "ASC"
Теперь нам потребуется решить проблему заполнения этих полей с учетом того, что администратор будет добавлять только торговые предложения. Для этого в файле /bitrix/php_interface/init.php регистрируем обработчик для событий
- OnAfterIBlockElementUpdate — вызывается после изменения элемента;
- OnAfterIBlockElementAdd — вызывается после добавления элемента;
- OnPriceAdd — вызывается при добавлении новой цены;
- OnPriceUpdate — вызывается в процессе изменения свойств товара)
который будет заполнять (обновлять) созданные в требуемом нам каталоге товаров.
Пример (обработчик BXIBlockAfterSave и регистрация для событий) можно посмотреть в стандартном решении интернет-магазин в файле /bitrix/php_interface/init.php.