Вы столкнетесь с проблемой при расчете скидок, если захотите добавлять товары в корзину с кастомной ценой. Скидки на такие товары просчитываться не будут. И об этом писали тут например https://idea.1c-bitrix.ru/26963/ . Нужно было как-то очень быстро и изящно решить эту проблему, хотя бы на время, пока разработчики наконец-то это не учтут в новых версиях. И очень рационально на мой взгляд сделать два разных параметра 'CHECK_PRICE' и 'CHECK_DISCOUNT' вместо 'CUSTOM_PRICE', что кстати уже реализовано в стандартном классе провайдере CCatalogProductProvider который по умолчанию передается параметром 'PRODUCT_PROVIDER_CLASS' в методе $basket->createItem, например.
Поэтому, исходя из проблемы, было принято решение скопировать стандартный PRODUCT_PROVIDER_CLASSCCatalogProductProvider (он находится тут /bitrix/modules/catalog/general/product_provider.php и реализован от интерфейса IBXSaleProductProvider ) и переименовать его, например, в CCatalogProductProviderCustom. В нашем новом провайдере меняем одну строчку (в моей версии это 65 строчка):
Теперь вы можете выставлять свою цену, а скидка будет просчитываться как раньше. p.s. Я предупреждаю, что данное решение на коленке, и если возможно оно кому-то поможет. Но если кто-то глубже погружался в проблему и знает, такого рецепта недостаточно, пожалуйста отпишитесь в комментариях. К слову версия Битрикса 18.1.3
1. Вы поправили код прямо в ядре. Если уж так и произошло, то PRODUCT_PROVIDER_CLASS нигде менять не нужно. Однако не следует править ядро, т.к. это вызовет проблемы. 2. Я пишу, что нужно нужно скопировать файл product_provider.php и переименовать название класса. Вы пишите что в этом же файле у PRODUCT_PROVIDER_CLASS заменила CCatalogProductProvider на CCatalogProductProviderCustom, но я имел ввиду, что PRODUCT_PROVIDER_CLASS нужно заменить там, где вы вызываете метод $basket->createItem.
Скидки могут не просчитываться по другой причине. У вас не работает это со стандартным шаблоном?
Перфильева Евгения, если так, то нужно будет убедиться, что используется ваш PRODUCT_PROVIDER_CLASS а не системный. Т.е. вы работаете на уровне методов, то в какой-то момент нужно будет указать свой класс в качестве аргумента, вот например тут https://dev.1c-bitrix.ru/api_help/sale...t__add.php параметром передается. Ну и в D7 методах тоже самое.
Если компонент у вас, то там смотреть надо. Сходу не скажу.
Перфильева Евгения, а что в $_POST["PRICE"]? Вообще странно, что у вас цена из POST принимается. Так любой сможет передать цену по которой хочет приобрести товар.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».