Иногда в процессе работы с интернет-магазином возникает потребность в добавлении свойств товара в корзину, с его (свойсвтом) дальнейшим отображением
в заказе в админке. Вы мне скажете : "Но ведь это можно сделать стандартными средствами, в чем проблема?"- и я скажу, что вы правы. Только вот проблема -
стандартные механизмы работают только со свойствами типа "Список" и "Справочник", не давая выбрать другие варианты.
Если вы относитесь к клану хитрозадых и смекнули, что можно просто добавить нужное свойство в коде вызова компонента catalog.section, то я вас сразу
расстрою - не катит такой вариант, сам из того же клана.
Короче, ниже приведу решение проблемы для свойств любых типов:
<? AddEventHandler("sale", "OnBeforeBasketAdd", "OnBeforeBasketAddHandler"); function OnBeforeBasketAddHandler(&$arFields){ $res = CIBlockElement::GetByID($arFields["PRODUCT_ID"]); if($ar_res = $res->GetNext()){ $PRODUCT_IBLOCK_ID = $ar_res["IBLOCK_ID"]; $PRODUCT_ID = $ar_res["ID"]; $db_props = CIBlockElement::GetProperty($PRODUCT_IBLOCK_ID, $PRODUCT_ID, array("sort" => "asc"), Array("CODE"=>"P_CODE")); if($ar_props = $db_props->Fetch()){ $arFields["PROPS"][] = Array( "NAME" => $ar_props["NAME"], "CODE" => $ar_props["CODE"], "VALUE" => $ar_props["VALUE"], "SORT" => $ar_props["SORT"] ); } } } ?>
Тут в 13-ой строке есть массив Array("CODE"=>"P_CODE") - в нем и перечислены все свойства товара, которые надо добавить. В качестве
значения элемента "CODE" может быть указан массив кодов свойств.
Стоит отметить, что подобная реализация позволяет добавлять товары, у которых эти свойства не заполнены.
Если нужно поставить ограничение на добавление товаров с пустым(и) свойствами, то
тогда уже нужно поставить доп проверку и кинуть эксепшен, если поле пустое, но это уже совсем другая история.
Ах и да - вся эта штука должна быть прописана в файле init.php в папке /bitrix/php_interface/ .
Если такого файла в папке нет (а такое вполне может быть), то просто создайте его.