@pavelmosin

Bitrix. Ошибка на событии OnBeforeBasketAdd?

Добрый день.

Добавляю в свойство товара при заказе свои свойства.
Свойства беру из другого инфоблока.
Свойства добавляю по событию OnBeforeBasketAdd
Что я хочу сделать.
Получить все элементы инфоблока со свойствами и проверять, заполнены они при отправке или нет.
Почему не работает такой код?
<?
	use Bitrix\Main\Context;


	if (!CModule::IncludeModule('iblock')) return;


	AddEventHandler(
		"sale",
		"OnBeforeBasketAdd",
		'addProperty'
	);



	function addProperty(&$arFields) {


		$request = Context::getCurrent()->getRequest();


		// Выбираем опции
		$arOrder = Array(
			"SORT"=>"ASC"
		);


		$arSelect = Array(
			"ID",
			"IBLOCK_ID",
			"CODE",
			"NAME",
			"PROPERTY_OPTION_TYPE",
		);


		$arFilter = Array(
			"IBLOCK_ID" => '2',
		);


		$res = CIBlockElement::GetList(
			$arOrder,
			$arFilter,
			false,
			false,
			$arSelect
		);


		while( $ob = $res->GetNextElement() ) {
			$arFields[] = $ob->GetFields();
		}


		$arOptionsAddToBasket['OPTIONS'] = $arFields;




		// Заполняем опции
		foreach ( $arOptionsAddToBasket['OPTIONS'] as $value ) {


			$arFields['PROPS'][$value['CODE']] = [
				'CODE' => $value['CODE'],
				'ID' => '',
				'VALUE' => '1',
				'SORT' => '',
				'NAME' => $value['NAME'],
			];
		}
	}
?>
  • Вопрос задан
  • 602 просмотра
Решения вопроса 1
winer
@winer
занимаюсь разработкой сайтов на 1c-bitrix
while( $ob = $res->GetNextElement() ) {
      $arFields[] = $ob->GetFields();//Тут ошибка. эта переменная используется в качестве параметра функции addProperty. 
}


Надо так:
function addProperty(&$arFields)
{

    // Выбираем опции
    $arOrder = Array(
        "SORT" => "ASC"
    );


    $arSelect = Array(
        "ID",
        "IBLOCK_ID",
        "CODE",
        "NAME",
        "PROPERTY_OPTION_TYPE",
    );


    $arFilter = Array(
        "IBLOCK_ID" => '19',
    );


    $res = CIBlockElement::GetList(
        $arOrder,
        $arFilter,
        false,
        false,
        $arSelect
    );

    $counter = 0;
    while ($ob = $res->GetNextElement()) {
        $arItem = $ob->GetFields();
        $arFields['PROPS'][$arItem['CODE']] = [
            'CODE' => $arItem['CODE'],
            'VALUE' => '1',
            'SORT' => $counter += 100,//Про сортировку свойств не надо забывать. ID был лишним.
            'NAME' => $arItem['NAME'],
        ];
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы