Добавление свойств товара в корзину

4 Апреля 2018

Иногда в процессе работы с интернет-магазином возникает потребность в добавлении свойств товара в корзину, с его (свойсвтом) дальнейшим отображением в заказе в админке. Вы мне скажете : "Но ведь это можно сделать стандартными средствами, в чем проблема?"- и я скажу, что вы правы. Только вот проблема - стандартные механизмы работают только со свойствами типа "Список" и "Справочник", не давая выбрать другие варианты.

Если вы относитесь к клану хитрозадых и смекнули, что можно просто добавить нужное свойство в коде вызова компонента 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/ . Если такого файла в папке нет (а такое вполне может быть), то просто создайте его.

Возврат к списку