1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
use Bitrix\Main\Application; use Bitrix\Main\Loader; use Bitrix\Sale; Loader::includeModule('iblock'); Loader::includeModule('sale'); if ($_REQUEST['flag_svoy_nominal']==1){ $ar_res = CIBlockElement::GetByID(687)->Fetch(); $result = array( 'PRODUCT_ID' => $ar_res['ID'], 'PREVIEW_PICTURE' => $ar_res['PREVIEW_PICTURE'], 'PRODUCT_XML_ID' => $ar_res['XML_ID'], 'CATALOG_XML_ID' => 'catalog-b8f039bc-0413-47fd-9729-b37b310f1c5e', // 'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider', 'PRICE' => $price, 'CUSTOM_PRICE' => 'Y', 'CURRENCY' => 'RUB', 'QUANTITY' => 1, 'LID' => SITE_ID, 'DELAY' => 'N', 'CAN_BUY' => 'Y', 'NAME' => htmlspecialchars_decode($ar_res['NAME']), // 'CALLBACK_FUNC' => 'MyBasketCallbackW', 'MODULE' => 'catalog', 'NOTES' => '', // 'ORDER_CALLBACK_FUNC' => 'MyBasketOrderCallback', 'DETAIL_PAGE_URL' => $ar_res['DETAIL_PAGE_URL'] ); $arProps[] = array( "NAME" => "Стоимость", "VALUE" => $price ); $result["PROPS"] = $arProps; CSaleBasket::Add($result); }else{ $ar_res = CIBlockElement::GetByID($_REQUEST['id'])->Fetch(); Add2BasketByProductID($ar_res['ID']); } require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php"); |
Функция CSaleBasket::Add- добавляет кастомную цену. CUSTOM_PRICE =Y — и цена кастомная. Т.е вообще любая, какую захочешь положить.
Вариант любой цены — можно сделать весовой товар. http://ftask.ru/весовой товар
Сделал там выборку нужной цены и подставил ее id и значение в $arFields. Тут вроде как появилась надежда — при добавлении в корзину из каталога нужная цена успешно подменялась — это было видно по обновляемой ajax малой корзине на странице. Но стоит зайти в большую корзину — все цены услуг в корзине сбрасываются на минимальные. Тут же удалял значение «CALLBACK_FUNC» в arFields (вычитал в каком то блоге) — тоже не помогло.
‘CUSTOM_PRICE’ => ‘Y’, — выставили?
У вас нет никаких обработчиков на показ корзины? (отключите всё в php_init и проверьте) . У вас может несколько скриптов драться между собой.