Чтобы изменить стоимость подарка нужно наследовать класс CSaleActionGiftCtrlGroup, переопределить методы GetControlShow, GetControlDescr, GetControlID, Generate. В методе Generate, передать на выход свой callback метод applySimpleGift. Метод applySimpleGift лежит в \Bitrix\Sale\Discount\Actions. Скопируйте его и измените цены на выходе
Код |
---|
$basketRow['DISCOUNT_PRICE'] = $basketRow['BASE_PRICE'] - 1;
$basketRow['PRICE'] = 1; |
Свой метод GetControlDescr необходимо передать обработчику OnCondSaleActionsControlBuildList. В методе GetControlShow верните в массиве свои значения ключей label и control. Измените выход метода GetControlID на свой.
После этого в настройках правил корзины, в действиях, появится ваше действие, например 'label' => 'Предоставить подарок за рубль'.
потом конечно нужно дать понять компоненту подарков, что у GiftCondGroup появился клон, но это уже тревиально типа
Код |
---|
if ($arParams['USE_GIFTS'] === 'Y' && $arParams['GIFTS_PLACE'] === 'BOTTOM')
{
if (is_array($giftParameters['FULL_DISCOUNT_LIST']))
foreach ($giftParameters['FULL_DISCOUNT_LIST'] as &$discountCond)
if ($discountCond['ACTIONS']['CHILDREN'][1]['CLASS_ID'] === 'CawebGiftCondGroup')
$discountCond['ACTIONS']['CHILDREN'][1]['CLASS_ID'] = 'GiftCondGroup';
if (is_array($giftParameters['APPLIED_DISCOUNT_LIST']))
foreach ($giftParameters['APPLIED_DISCOUNT_LIST'] as $key => &$discountCond)
if ($discountCond['ACTIONS']['CHILDREN'][1]['CLASS_ID'] === 'CawebGiftCondGroup'){
$discountCond['ACTIONS']['CHILDREN'][1]['CLASS_ID'] = 'GiftCondGroup';
unset($giftParameters['FULL_DISCOUNT_LIST'][$key]);
}
$APPLICATION->IncludeComponent(
'bitrix:sale.gift.basket',
'.default',
$giftParameters,
$component
);
} |
так конечно лучше не делать так как discountCond['ACTIONS']['CHILDREN'][1]['CLASS_ID'] может быть хоть каким. В шаблон компонента bitrix:sale.gift.basket тоже поправить придется.
В общем кто ищет простых путей, проще чем этот я не нашел.
profit))