Работа со скидками битрикс api
Как вывести все товары со скидкой в 1С-битрикс (catalog.section)
На одном проекте потребовалось вывести на определенной странице все товары со скидкой, проставленной в Правилах работой с корзиной.
К сожалению, в данный момент для этого нет готового решения. Т.е. нельзя например в фильтре компонента или GetList-а задать определенный параметр и таким образом получить все нужные товары.
Погуляв по форумам в поисках готового решения не нашел ничего подходящего для меня, пришлось делать всё ручками с нуля 🙂
Сразу скажу, что не претендую на звание лучшего решения данного вопроса, но для моей задачи этого вполне хватило. Если будут какие-либо предложения по улучшению логики работы, буду только рад.
Как будем реализовывать: создаем скрипт, который будет проходится по всем товарам, смотреть есть ли у них скидка и если есть, проставлять специальное свойство. По этому свойству уже мы сможем фильтровать нужные нам товары. Скрипт ставим на крон с нужной периодичностью или запускаем руками при необходимости.
Заводим для нашего основного инфоблока свойство типа Список (можно и простую строку, у меня просто оно уже было). Ставим там одно единственное возможное значение (у меня это «yes»). У меня свойство имеет код SPECIALOFFER.
Далее в какой-нибудь служебной папочке добавляем скрипт следующего содержания, где меняем входные параметры на свои, а именно: код инфоблока, значение свойства, сам код свойства (если у вас он другой)
Всё, теперь нам только остается добавить фильтрацию по нашему свойству где это необходимо.
CCatalogDiscount
Методы класса
Метод | Описание | С версии | До версии |
---|---|---|---|
Add | Метод добавляет новую скидку в соответствии с данными из массива arFields. | 4.0.4 | |
Delete | Метод удаляет скидку с кодом ID. | 4.0.4 | |
SetCoupon | Метод добавляет код купона coupon в массив доступных для получения скидки купонов текущего покупателя. Система вычисляет минимальную для данного покупателя цену товара с учётом всех его скидок и купонов. | 4.0.4 | 12.0.0 |
GetCoupons | Метод возвращает массив доступных для получения скидки купонов текущего покупателя. Система вычисляет минимальную для данного покупателя цену товара с учётом всех его скидок и купонов. | 4.0.4 | 12.0.0 |
ClearCoupon | Метод очищает возвращает массив доступных для получения скидки купонов текущего покупателя. Система вычисляет минимальную для данного покупателя цену товара с учётом всех его скидок и купонов. | 4.0.4 | 12.0.0 |
GetDiscountByPrice | Метод вычисляет скидку на цену с кодом productPriceID товара для пользователя, принадлежащего группам пользователей arUserGroups. | 4.0.4 | |
GetDiscountByProduct | Метод вычисляет скидку на товар с кодом productID для пользователя, принадлежащего группам пользователей arUserGroups. | 4.0.5 | |
GetByID | Метод выбирает параметры скидки по ее коду ID. | 4.0.4 | |
GetList | Метод возвращает результат выборки записей скидок в соответствии со своими параметрами. | 4.0.4 | |
GetDiscountGroupsList | Метод возвращает результат выборки записей с информацией о привязке скидок к группам пользователей в соответствии со своими параметрами. | 4.0.4 | |
GetDiscountCatsList | Метод возвращает результат выборки записей с информацией о привязке скидок к типам цен в соответствии со своими параметрами. | 4.0.4 | |
GetDiscountProductsList | Метод возвращает результат выборки записей с информацией о привязке скидок к товарам в соответствии со своими параметрами. | 4.0.4 | 12.0.0 |
GetDiscountSectionsList | Метод возвращает результат выборки записей с информацией о привязке скидок к группам товаров в соответствии со своими параметрами. | 4.0.4 | 12.0.0 |
Update | Метод изменяет параметры скидки с кодом ID в соответствии с данными из массива arFields. | 4.0.4 |
С версии 12.0.0 в связи с изменением логики работы модуля считаются устаревшими следующие методы:
До выхода версии 12.0.0 все вышеперечисленные методы являлись служебными и позволяли получить явно заданные привязки скидки к инфоблоку, разделу, элементу. То есть данные, которые можно было увидеть в форме редактирования скидки.
Использование этих методов для получения ID элементов, на которые могла подействовать скидка, было и является некорректным. Например, для скидки, у которой задано ограничение на раздел, вызов GetDiscountProductsList вернет пустой массив.
С выходом 12.0 эти методы оставлены лишь для сохранения совместимости. Они могут вернуть привязки лишь к тем инфоблокам, разделам, элементам, которые явно заданы в ограничениях. Т.е. если скидка действует на название элемента, все перечисленные методы вернут пустые массивы.
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.
Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
Discount
Пространство имен \Bitrix\Sale\Discount содержит подпространства, классы и методы для расчета всех скидок (каталога и магазина) и округления цен для корзины или заказа.
Пространство имен | Описание |
---|---|
Formatter | Класс предназначен для генерации описаний как самих правил корзины, так и их результатов. |
Gift | Содержит классы для работы с подарками. |
Методы
Метод | Описание | С версии | До версии |
---|---|---|---|
buildFromBasket | Метод устанавливает пользовательский контекст для вычисления скидок. | 17.0.11 | |
calculate | Метод для полного расчета всех скидок. | 15.5.0 | |
clearBasketItemData | Метод удаляет внутренний кеш данных по позиции корзины. Вызывается при удалении позиции из корзины. | 15.5.0 | |
getApplyMode | Метод возвращает режим взаимодействия правил корзины со скидками остальных модулей для заказа. | 15.5.0 | |
getApplyModeList | Метод возвращает перечень режимов взаимодействия правил корзины со скидками остальных модулей. | 15.5.0 | |
getApplyResult | Метод возвращает все результаты расчета, включая итоговые и базовые (исходные) цены корзины и доставки, перечень примененных скидок, правил корзины и купонов, флаги применения (вкл/выкл). | 15.5.0 | |
getOrder | Метод возвращает объект заказа. | 15.5.0 | |
getShipmentsIds | Метод возвращает список идентификаторов отгрузок для существующего заказа. | 15.5.0 | |
getUseMode | Метод возвращает текущий режим расчета всех скидок и правил для заказа/корзины. | 15.5.0 | |
isClone | Метод возвращает true, если обращение идет к клонированному объекту скидок. | 16.0.26 | |
isOrderExists | Метод возвращает флаг существования заказа (true/false), поскольку расчет может вестись для корзины без заказа. | 16.0.2 | |
isOrderNew | Метод возвращает флаг того, что заказ является новым, т.е. у заказа еще нет идентификатора. | 16.0.2 | |
isOrderRefresh | Метод возвращает флаг полного пересчета заказа. | 16.0.25 | |
load | Метод возвращает инициализированный объект скидок для переданного объекта заказа. | 15.5.0 | 17.0.11 |
loadByBasket | Метод возвращает инициализированный объект скидок для переданного объекта корзины товаров, не привязанной к заказу. | 16.0.10 | 17.0.11 |
loadByFuser | Метод возвращает инициализированный объект скидок для комбинации $fuser и $site. | 16.0.10 | |
save | Метод сохраняет результаты применения к заказу скидок и правил округлений. | 15.5.0 | |
setApplyResult | Метод позволяет указать, какие из выбранных скидок и правил исключить из расчета. | 15.5.0 | |
setCalculateShipments | Метод устанавливает отгрузку для проведения расчетов. | 15.5.0 | |
setOrder | Метод необходим, если для объекта корзины производились вычисления скидок, после чего она была привязана к заказу. | 16.0.10 | |
setOrderRefresh | Метод устанавливает флаг пересчета заказа в административной форме редактирования. | 16.0.25 | |
setUseMode | Метод устанавливает режим расчета всех скидок и правил для заказа/корзины. | 15.5.0 |
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.
Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
GetList
Описание и параметры
Метод возвращает результат выборки записей скидок в соответствии со своими параметрами. Нестатический метод.
Параметры вызова
Параметр | Описание |
---|---|
arOrder | Массив, в соответствии с которым сортируются результирующие записи. Массив имеет вид: В качестве «название_поляN» может стоять любое поле скидки, а в качестве «направление_сортировкиX» могут быть значения «ASC» (по возрастанию) и «DESC» (по убыванию). |
Если массив сортировки имеет несколько элементов, то результирующий набор сортируется последовательно по каждому элементу (т.е. сначала сортируется по первому элементу, потом результат сортируется по второму и т.д.).
Пример фильтра: Этот фильтр означает «выбрать все записи, в которых значение в поле DISCOUNT_ID (код скидки) равно 15».
Если массив пустой, то метод вернет число записей, удовлетворяющих фильтру.
Возвращаемые значения
Возвращается объект класса CDBResult, содержащий набор ассоциативных массивов с ключами:
Если в качестве параметра arGroupBy передается пустой массив, то метод вернет число записей, удовлетворяющих фильтру.
Примеры использования
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.
Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
CCatalogDiscountCoupon
Методы класса
Метод | Описание | С версии |
---|---|---|
Add | добавляет купон для выбранной скидки. | 5.1.0 |
CheckFields | проверяет информацию о купоне перед добавлением или обновлением. | 5.1.0 |
ClearCoupon | очищает массив купонов, введенных текущим покупателем. | 12.0.0 |
Delete | удаляет купон. | 5.1.0 |
DeleteByDiscountID | удаляет все купоны для выбранной скидки. | 5.1.0 |
GetByID | возвращает информацию о купоне по его коду (ID). | 5.1.0 |
GetList | выбирает купоны, соответствующие условиям. | 5.1.0 |
IsExistCoupon | проверяет существование купона. | 14.0.0 |
GetCoupons | возвращает массив доступных для получения скидки купонов текущего покупателя. | 12.0.0 |
GetCoupontTypes | возвращает массив имеющихся на сайте типов купонов. | 12.5.1 |
SetCoupon | добавляет код купона coupon в массив доступных для получения скидки купонов текущего покупателя. | 12.0.0 |
Update | обновляет информацию о купоне. | 5.1.0 |
Константы класса
Константа | Значение | Описание | С версии |
---|---|---|---|
TYPE_ONE_TIME | Y | Купон на одну позицию заказа. | 12.5.0 |
TYPE_ONE_ORDER | O | Купон на один заказ. | 12.5.0 |
TYPE_NO_LIMIT | N | Многоразовый купон. | 12.5.0 |
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.
Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.