[spoiler]
Обратимся к документации. Метод возвращает данные следующей структуры:
array( 'PRICE' => массив_параметров_минимальной_цены, 'DISCOUNT_PRICE' => минимальная_цена_в_базовой_валюте, 'DISCOUNT' => массив_параметров_первой_из_примененных_скидок_торгового_каталога, 'DISCOUNT_LIST' => массив_скидок_действующих_на_товар_в_порядке_применения ) |
Начиная с catalog 15.0.2 появился еще один ключ - RESULT_PRICE. Он содержит следующую информацию:
'RESULT_PRICE' => array( 'BASE_PRICE' => полная (без скидок) цена товара, 'DISCOUNT_PRICE' => цена со скидками, 'DISCOUNT' => итоговая скидка (разница между BASE_PRICE и DISCOUNT_PRICE) 'PERCENT' => итоговая скидка в процентах 'CURRENCY' => валюта результата ) |
I. пара CCatalogProduct::setUsedCurrency($currency) и CCatalogProduct::getUsedCurrency()
Метод CCatalogProduct::setUsedCurrency указывает, в какой валюте ($currency) считать данные для ключа RESULT_PRICE. Возвращаемого значения нет. Если указана несуществующая валюта - она будет проигнорирована.
Метод CCatalogProduct::getUsedCurrency возвращает null (в этом случае данные считаются в базовой валюте) либо код используемой валюты.
Сейчас эта пара используется в штатном провайдере (CCatalogProvider) для проведения всех расчетов в валюте магазина.
Метод CCatalogProduct::clearUsedCurrency сбрасывает заданную валюту (т.е. после его вызова все расчеты ведутся в базовой валюте)
II. пара CCatalogProduct::setPriceVatIncludeMode($mode) и CCatalogProduct::getPriceVatIncludeMode()
Вызов CCatalogProduct::setPriceVatIncludeMode позволяет указать - включать или нет НДС в значения полей ключа RESULT_PRICE. Он имеет все один параметр - булевый. true - включать, false - выключать. По умолчанию НДС включен в результат.
Метод CCatalogProduct::getPriceVatIncludeMode() возвращает текущее состояние этой настройки.
III. Методы CCatalogProduct::setUseDiscount($mode) и CCatalogProduct::getUseDiscount()
Метод CCatalogProduct::setUseDiscount позволяет запретить или разрешить использование скидок торгового каталога при вычислении минимальной цены товара. Действует на все данные, возвращаемые CCatalogProduct::GetOptimalPrice. Параметр один, булевый. true - разрешить, false - запретить.
Все методы статические, т.е. действуют в пределах всего хита (после вызова, естественно).
Начиная с обновления catalog 15.0.6 ключ RESULT_PRICE заполняется данными и в том случае, когда использованы обработчики события OnGetOptimalPrice. Параметры, заданные методами CCatalogProduct::setUsedCurrency и CCatalogProduct::setPriceVatIncludeMode при этом учитываются, CCatalogProduct::setUseDiscount - нет.
Для улучшения производительности авторам кастомных провайдеров рекомендуется внести изменения в свой код с учетом вышеизложенных возможностей.
Евгений, можете уточнить в чем именно слабое место, ради которого надо вновь пересматривать проекты клиентов?