[spoiler]
Для получения информации о скидках для конкретного товара используется метод CCatalogDiscount::GetDiscount():
CCatalog::GetDiscount($productID, $iblockID, $arCatalogGroups = array(), $arUserGroups = array(), $renewal = "N", $siteID = false, $arDiscountCoupons = false, $boolSKU = true, $boolGetIDS = false) |
- ID товара
- ID инфоблока товара
- перечень типов цен
- перечень групп пользователя
- сайт, купоны
- $boolSKU - для торговых предложений учитывать скидки, заданные на товар
- $boolGetIDS - возвращать только ID скидок (по умолчанию - полная информация)
Для расчета цены товара с учетом максимальной скидки используется метод CCatalogProduct::GetOptimalPrice(). Информацию о скидках он получает через CCatalogDiscount::GetDiscount(). Так как метод вызывается в callback-функциях, бессмысленно пытаться подставить в корзину свою цену напрямую - она будет пересчитана при любом обновлении корзины.
и ежу понятно, что бессмысленно без написания собственных callback функций.
Но не пора ли уже дать возможность разработчикам влиять на самостоятельное "ценообразование и ценоконтроль" не только через использование своих callback функций, а и через переопределение GetOptimalPrice
Ну что стоит там подключить возможность вызова функции пользователя, если таковая существует?
Не спорю, callback переписать достаточно и вроде надежно, но...
1. при этом мы должны как минимум переписывать процедуры добавления в корзину, а отсюда следует и кастомизация основных компонентов, которые будем использовать.
2. при замещении типовых callback функций программист уже берет на себя ответсвенность за их корректность на всех этапах, равно также, как и взял бы ответсвенность за переопределение GetOptimalPrice, так почему бы уж не упростить то?
Помнится, как то уже Долганин по поводу GetOptimalPrice поднимал вопрос
А то сейчас как то получается страшновато. Хочешь свое ценоопределение или ценообразование - будь готов перекраивать и там и сям. С переопределением GetOptimalPrice было бы легче.
Ну хоть событие бы повесили на данный метод чтоли? Или оно уже есть?
Переопределение - Вы это как себе представляете? Что касается событий - дам, но не только там, а по всей цепочке. По срокам - скоро.
если это так... то это даже отдельная тема для отдельного поста
Это даст богатые возможности работы с "нетиповыми" прайсами и скидками.
Пока же в таких случаях без callback не обойтись, а это как правило - прощание с типовыми компонентами
что касается "переопределения" - то имел в виду возможность вызова пользовательских функций в getOptimalPrice либо переопределения результата через обработку событий.
погорячился :)в сообществе, действительно, еще проскальзывают советы как "свои цены в корзину закидывать" без какого то упоминания callback
свежачок из капитана очевидности