Тип цены от суммы товаров в корзине Битрикс
2020.08.10
Например имеется два типа цен, Оптовая и Розничная, нужно если в корзине товаров больше чем на 5000 рублей в розничной цене то применять оптовую.
Для изменения типа цены будем изменять принадлежность пользователя к группе которой разрешена покупка по данному типу цен.
Для этого достаточно разместить скрипт представленный ниже в файл init.php находящийся по пути /bitrix/php_interface/init.php или /local/php_interface/init.php или же нужно будет создать его либо там либо там.
После вставки скрипта необходимо отредактировать константы представленные в самом начале кода
public $PRICE_CART = 5000; /* Лимит после которого включается оптовая цена */
public $GROUP_PRICE = 5; /* ID группы пользователей кому доступна оптовая цена */
public $BASE_PRICE = 1; /* ID Розничной цены */
Готово, можно проверять работу
(Важно! все изменения подключения и создание файла init.php лучше производить через файловый менеджер)
Для изменения типа цены будем изменять принадлежность пользователя к группе которой разрешена покупка по данному типу цен.
Для этого достаточно разместить скрипт представленный ниже в файл init.php находящийся по пути /bitrix/php_interface/init.php или /local/php_interface/init.php или же нужно будет создать его либо там либо там.
После вставки скрипта необходимо отредактировать константы представленные в самом начале кода
public $PRICE_CART = 5000; /* Лимит после которого включается оптовая цена */
public $GROUP_PRICE = 5; /* ID группы пользователей кому доступна оптовая цена */
public $BASE_PRICE = 1; /* ID Розничной цены */
Готово, можно проверять работу
(Важно! все изменения подключения и создание файла init.php лучше производить через файловый менеджер)
<? use Bitrix\Sale; AddEventHandler("sale", "OnBasketUpdate", Array("SaleEventHendlers", "StartUpdateCart")); class SaleEventHendlers{ public $PRICE_CART = 5000; /* Лимит после которого включается оптовая цена */ public $GROUP_PRICE = 5; /* ID группы пользователей кому доступна оптовая цена */ public $BASE_PRICE = 1; /* ID Розничной цены */ public function RegCart(&$arFields){ $dbBasketItems = CSaleBasket::GetList( array( "NAME" => "ASC", "ID" => "ASC" ), array( "FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL" ), false, false, array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "WEIGHT") ); $productFilter = array(); $result = array(); while ($arItems = $dbBasketItems->Fetch()) { if (strlen($arItems["CALLBACK_FUNC"]) > 0) { CSaleBasket::UpdatePrice($arItems["ID"], $arItems["CALLBACK_FUNC"], $arItems["MODULE"], $arItems["PRODUCT_ID"], $arItems["QUANTITY"]); $arItems = CSaleBasket::GetByID($arItems["ID"]); } $productFilter[] = $arItems['PRODUCT_ID']; $result[$arItems['PRODUCT_ID']] = $arItems; } $ProductTableOB = \Bitrix\Catalog\PriceTable::getList(array( 'filter' => array( 'PRODUCT_ID' => $productFilter, 'CATALOG_GROUP_ID' => $this->BASE_PRICE ) )); $SUMM = 0; while ($ProductPrice = $ProductTableOB->fetch()){ $SUMM = $SUMM + $result[$ProductPrice['PRODUCT_ID']]['QUANTITY'] * $ProductPrice['PRICE']; } if ($SUMM > $this->PRICE_CART){ global $USER; $arGroups = CUser::GetUserGroup($USER->GetID()); if(!in_array($this->GROUP_PRICE, $arGroups)){ $arGroups[] = $this->GROUP_PRICE; $arFields = [ 'GROUP_ID' => $arGroups, ]; $USER->Update($USER->GetID(), $arFields); } }else{ global $USER; $arGroups = CUser::GetUserGroup($USER->GetID()); if(in_array($this->GROUP_PRICE, $arGroups)){ foreach ($arGroups as $key => $oneGroup){ if ($oneGroup == $this->GROUP_PRICE){ unset($arGroups[$key]); } } $arFields = [ 'GROUP_ID' => $arGroups, ]; $USER->Update($USER->GetID(), $arFields); } } } public function StartUpdateCart($ID, &$arFields){ $ob = new SaleEventHendlers(); $ob->RegCart($arFields); } }