Суть уровней цен в битриксе : есть табличка
b_catalog_price
В ней хранятся записи по принципу Один ко многим :
т.е один элемент каталога (инфоблока) имееет много цен. У меня на сайте — 4 типа цены.
имеем. Для товара с id =5118 есть 4 записи . CATALOG_GROUP_ID — это тип цены.
А теперь мы переходим к добавлению в корзину.
Add2BasketByProductID($_REQUEST[«item»], $_REQUEST[«quantity»]); — в эту функцию мы засовываем id товара и его количество. А функция сама выбирает наименьшую цену.
А если воспользоваться Add2Basket(Id цен из таблички на картинке, количество ) ( https://bxapi.ru/src/?module_id=catalog&name=Add2Basket ), то мы добавим в корзину именно ту цену, что нам нужна!!!
Если вызвать Add2Basket без параметров- она все равно добавит наименьшую цену.
Что бы добавилась цена что надо
надо прописать вот так
1 2 3 4 5 6 7 8 9 10 11 |
Add2Basket( $PRICE_ID, $QUANTITY, array( "CUSTOM_PRICE" => "Y", "IGNORE_CALLBACK_FUNC" => "Y", "PRODUCT_PROVIDER_CLASS" => "", // "PRICE" => 100,можно свою цену указать ) ); |
Аналогичная запись будет , если использовать вот такую функцию
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 |
function AddProductToBasket($priceID, $qty = 1) { $qty = ($qty <= 0) ? 1 : $qty; $rsPrice = CPrice::GetList(array(),array("ID" => intval($priceID))); if (!$arPrice = $rsPrice->Fetch()) return false; $arProduct = CCatalogProduct::GetByIDEx($arPrice['PRODUCT_ID']); $arFields = Array ( "PRODUCT_ID" => $arProduct['ID'], "PRODUCT_PRICE_ID" => $arPrice["ID"], "PRICE" => $arPrice["PRICE"], "CURRENCY" => "RUB", "QUANTITY" => intval($qty), "LID" => LANG, "DELAY" => "N", "CAN_BUY" => "Y", "NAME" => $arProduct['NAME'], "CUSTOM_PRICE" => "Y", "IGNORE_CALLBACK_FUNC" => "Y", "WEIGHT" => $arProduct['PRODUCT']['WEIGHT'], ); $basketItem = CSaleBasket::Add($arFields); if ($basketItem) return $basketItem; return false; } |
Если из записи
1 2 3 4 5 6 7 8 9 10 11 |
Add2Basket( $PRICE_ID, $QUANTITY, array( "CUSTOM_PRICE" => "Y", "IGNORE_CALLBACK_FUNC" => "Y", "PRODUCT_PROVIDER_CLASS" => "", // "PRICE" => 100,можно свою цену указать ) ); |
удалить PRODUCT_PROVIDER_CLASS — то цена будет видна зачеркнутая со скидкой (в продуктах аспро) . Точно не проверял, как корректно они уже отрабатывают.
В итоге можно смотреть в сторону провайдера цен.
Провайдер цен можно найти на этом сайте (https://ftask.ru/провайдерцен) . У интерволги запросить (https://www.intervolga.ru/blog/projects/personalnye-tseny-i-skidki-v-internet-magazine-na-1c-bitriks/) или же где то еще.