function getIblockProps($id) { global $DB; $sql = "SELECT b.id, b.code, b.name, ----- p.id as pid, p.code as pcode, p.name as pname, p.SORT psort, UPPER(CASE WHEN p.USER_TYPE IS NOT NULL THEN p.USER_TYPE WHEN p.PROPERTY_TYPE = 'S' AND p.ROW_COUNT > 1 THEN 'T' ELSE p.PROPERTY_TYPE END) as ptype, CASE WHEN p.MULTIPLE = 'Y' THEN 1 END as pmultiple, CASE WHEN p.MULTIPLE = 'Y' THEN p.MULTIPLE_CNT END pmultiple_cnt, CASE WHEN p.LINK_IBLOCK_ID > 0 THEN p.LINK_IBLOCK_ID END as piblock, CASE WHEN p.IS_REQUIRED = 'Y' THEN p.IS_REQUIRED END preq, p.HINT as phint, ----- e.ID as eid, e.VALUE as evalue, e.DEF as edef, e.SORT as esort FROM b_iblock b , b_iblock_property p LEFT JOIN b_iblock_property_enum e ON(e.property_id = p.id) WHERE b.id = %u AND b.id = p.IBLOCK_ID AND p.ACTIVE = 'Y' ORDER BY p.sort,e.SORT"; $rs = $DB->Query( sprintf( $sql, intval($id) ) ); $rows = array(); while ($row = $rs->Fetch()) { $rows[] = $row; } return $rows; }
Запрос берет информацию о полях и свойствах инфоблока. Если поле ссылочное, то функцию можно вызывать рекурсивно.
2. Особенность создания товарных предложений через код.
Создали мы товарное предложение через код:
$el = new CIBlockElement; $id = $el->Add($arFields);
Задали цену:
CPrice::SetBasePrice( $id, $arFields['PRICE'], "RUB", 1);
Заполнили остатки:
$arFields = Array( "PRODUCT_ID" => $id, "STORE_ID" => 1, "AMOUNT" => $v['Количество'], ); CCatalogStoreProduct::Add($arFields);
Вроде все. Но товар не покупается, хотя все атрибуты присутствуют.
Чтобы все заработало, нужно еще раз добавить (именно добавить, а не обновить) предложение, но другой функцией:
$arFields = array('ID'=>$id, 'PRICE_TYPE' => 'S', 'QUANTITY' => floatval($f['Количество'])); CCatalogProduct::Add($arFields);
Комментариев нет:
Отправить комментарий