Привет,
Довольно частная задача: преподносить покупателю подарки при покупке товара. "Подарком" может быть бесплатная упаковка, дополнительный дешевенький аксессуар или просто бесплатный товар.[spoiler]
Сначала нужно привязать к товару эти самые "подарки". Это делается посредством создания множественного свойства инфоблока типа "Привязка к элементу". Собственно, создаём такое свойство, задаём ему символьный код "PRESENT", в настройках свойства указываем инфоблок, из которого будем брать бесплатные товары.


Затем переходим к редактированию элемента инфоблока, для которого создали свойство, и выбираем товары-подарки.

2. В /bitrix/php_interface/init.php вставляем обработчик события OnBasketAdd, который будет добавлять товары-подарки в корзину с нулевой ценой:
и обработчик события OnBasketDelete, в котором товары-подарки будут удаляться из корзины, если из корзины удаляется товар, за покупку которого подарки и были предоставлены.
Теперь при добавлении товара в корзину, если к нему привязаны бесплатные товары, то и они будут добавляться в корзину нулевой ценой. Для того, чтобы отображать полагающиеся за покупку подарки нужно кастомизировать шаблон компонента. Пример подобной кастомизации . В шаблон добавлен result_modifi. Вы глядит всё это примерно так:

При добавлении товара в корзину, видим следующее:

Готовый init.php .
Всё.
Довольно частная задача: преподносить покупателю подарки при покупке товара. "Подарком" может быть бесплатная упаковка, дополнительный дешевенький аксессуар или просто бесплатный товар.[spoiler]
Сначала нужно привязать к товару эти самые "подарки". Это делается посредством создания множественного свойства инфоблока типа "Привязка к элементу". Собственно, создаём такое свойство, задаём ему символьный код "PRESENT", в настройках свойства указываем инфоблок, из которого будем брать бесплатные товары.


Затем переходим к редактированию элемента инфоблока, для которого создали свойство, и выбираем товары-подарки.

2. В /bitrix/php_interface/init.php вставляем обработчик события OnBasketAdd, который будет добавлять товары-подарки в корзину с нулевой ценой:
AddEventHandler("sale", "OnBasketAdd", "AddPresentToBasket");
function AddPresentToBasket($ID,$arFields)
{
$dbel=CIBlockElement::GetByID($arFields['PRODUCT_ID']);
$el=$dbel->Fetch();
$dbres=CIBlockElement::GetList(Array(),Array(
"IBLOCK_ID"=>$el['IBLOCK_ID'],
"ID"=>$arFields['PRODUCT_ID']),
false,
false,
Array("PROPERTY_PRESENT"));
while ($res=$dbres->Fetch())
{
$dbFindInBasket=CSaleBasket::GetList(array("NAME" => "ASC","ID" => "ASC"),
Array(
"PRODUCT_ID"=>$res['PROPERTY_PRESENT_VALUE'],
"FUSER_ID" => CSaleBasket::GetBasketUserID(),
"LID" => SITE_ID,
"ORDER_ID" => "NULL")
);
if(!$dbFindInBasket->Fetch())
{
$dbPresent=CIBlockElement::GetByID($res['PROPERTY_PRESENT_VALUE']);
if ($present=$dbPresent->Fetch())
{
$arFieldsPresent = array(
"PRODUCT_ID" => $res['PROPERTY_PRESENT_VALUE'],
"PRODUCT_PRICE_ID" => 0,
"PRICE" => 0.00,
"CURRENCY" => 'RUB',
"WEIGHT" => 0,
"QUANTITY" => 1,
"LID" => SITE_ID,
"DELAY" => "N",
"CAN_BUY" => "Y",
"NAME" => $present["NAME"],
"MODULE" => "catalog",
"NOTES" => "Товар в подарок",
);
CSaleBasket::Add($arFieldsPresent);
}
}
}
}
|
и обработчик события OnBasketDelete, в котором товары-подарки будут удаляться из корзины, если из корзины удаляется товар, за покупку которого подарки и были предоставлены.
AddEventHandler("sale", "OnBasketDelete", "DeletePresentFromBasket");
function DeletePresentFromBasket($ID)
{
$arFields=CSaleBasket::GetByID($ID);
$dbel=CIBlockElement::GetByID($arFields['PRODUCT_ID']);
$el=$dbel->Fetch();
$dbres=CIBlockElement::GetList(
Array(),
Array("IBLOCK_ID"=>$el['IBLOCK_ID'],"ID"=>$arFields['PRODUCT_ID']),false,false,Array("PROPERTY_PRESENT"));
while ($res=$dbres->Fetch())
{
print_r($res);
$dbFindInBasket=CSaleBasket::GetList(array("NAME" => "ASC","ID" => "ASC"),Array("PRODUCT_ID"=>$res['PROPERTY_PRESENT_VALUE'],"FUSER_ID" => CSaleBasket::GetBasketUserID(),
"LID" => SITE_ID,"ORDER_ID" => "NULL"));
if($arFindInBasket=$dbFindInBasket->Fetch())
CSaleBasket::Delete($arFindInBasket['ID']);
}
} |
Теперь при добавлении товара в корзину, если к нему привязаны бесплатные товары, то и они будут добавляться в корзину нулевой ценой. Для того, чтобы отображать полагающиеся за покупку подарки нужно кастомизировать шаблон компонента. Пример подобной кастомизации . В шаблон добавлен result_modifi. Вы глядит всё это примерно так:

При добавлении товара в корзину, видим следующее:

Готовый init.php .
Всё.