Работа страницы оформления заказа
О статье
| Дата актуальности | Актуальна с 25 мая 2026 года |
|---|---|
| Связанные задачи | |
| Связанные статьи | |
| Ключевые слова |
Общая информация
| URL страницы | https://semena.ru/order/ |
|---|---|
| Компонент | bitrix:sale.order.ajax |
| Путь к шаблону | /local/templates/semena/components/bitrix/sale.order.ajax/custom-ahv/ |
Условия и функции
Функции в файле template.js
Ниже представлены два раздела с
SaleOrderStoreList
| Наименование | Описание |
|---|---|
| isZeroCoords | Функция-проверка на нулевые координаты (широта, долгота). |
| getDefaultCoords | Выставляет дефолтные координаты – Москва. Связан с проверкой на нулевые координаты |
| init | Инициализирует карту Yandex Maps после готовности API (ymaps.ready). Определяет стартовые координаты (из delivery.COORDS или дефолтные), создаёт карту и запускает построение кластеров магазинов. |
| intercept | Обрабатывает клики внутри карты/балуна.Закрывает список магазинов при клике вне элемента Обрабатывает выбор магазина (store_list__selector) Обновляет выбранный магазин в родительском компоненте и пересоздаёт обработчики взаимодействия |
| createPlacemark | Создаёт метку для конкретного магазина на карте. Формирует содержимое: название, адрес, график работы, телефон, описание и кнопку выбора магазина. |
| createClusterer | Создаёт кластер объектов карты. |
| update | Обновляет состояние карты при изменении данных доставки.Проверяет валидность карты Центрирует карту Очищает старые объекты Пересоздаёт кластеры магазинов |
SaleOrderAjax
| Наименование | Описание |
|---|---|
| validate | Проверяет обязательные поля формы перед оформлением заказа. Формирует список ошибок, если какие-то поля из VALIDATION не заполнены. Для пункта BUYER_STORE дополнительно учитывает тип доставки. При ошибках добавляет их в ERROR_LIST и прокручивает страницу вверх. |
| send | Отправляет AJAX-запрос на сервер через BX.ajax. Собирает данные формы, добавляет системные параметры Bitrix и переданные payload-данные. Вызывает callback с ответом сервера. |
| applyOrderData | Обновляет данные заказа после ответа сервера. Проверяет корзину на запрещённые товары, сохраняет их и включает флаг hasForbiddenItems для определенного типа корзины. Формирует слепок корзины для последующего сравнения. Также обновляет списки доставки, оплаты, итоговую сумму и свойства заказа. При необходимости автоматически переключает доступный способ доставки. |
| update | Проверяет, можно ли оформить заказ: заполнены ли обязательные поля, выбрана ли доставка и оплата. После этого делает запрос на сервер для обновления данных заказа и применяет полученный результат через applyOrderData. |
| save | Финальная проверка перед оформлением заказа. Проверяет согласие пользователя, минимальную сумму и валидность формы. Затем обновляет данные заказа и сравнивает текущую корзину с сохранённым состоянием. Если всё корректно – запускает финальное сохранение через executeFinalSave. |
| executeFinalSave | Отправляет финальный запрос на оформление заказа. Если сервер возвращает ошибки (связанные со стоимостью корзины – ниже порогового значения) – выводит их пользователю. Если заказ успешно создан – перенаправляет пользователя на страницу результата. |
| selectedPaySystem | Возвращает выбранную платежную систему из списка, у которой стоит флаг CHECKED. |
| selectedDelivery | Возвращает выбранный способ доставки из списка, у которого стоит флаг CHECKED. |
| visiblePaySystems | Фильтрует список платежных систем. Скрывает определённые варианты оплаты в зависимости от выбранной доставки и прав администратора. |
| filteredDeliveryList | Возвращает список доставок, исключая запрещённую доставку, если в корзине есть запрещённые товары.Связан с выводом под определенный тип корзины. |
Путь: /local/templates/semena/components/bitrix/sale.order.ajax/custom-ahv/template.php
| Название поля | Описание |
|---|---|
| COUPON_LIST | Список применённых или доступных купонов. Используется для отображения скидок и их применения к заказу. Может быть пустым, если купонов нет. |
| PERSON_TYPE_LIST | Список типов плательщика (например, физлицо или юрлицо). Определяет, какие поля формы и правила оформления будут доступны пользователю. |
| DELIVERY_LIST | Объект со всеми доступными способами доставки. Каждый элемент содержит данные о доставке (ID, название, стоимость, выбран ли сейчас и т.д.). Используется для отображения и выбора доставки. |
| DELIVERY_LIST_SORT | Массив с порядком отображения доставок. Хранит ID доставок в нужной последовательности, чтобы не зависеть от порядка в DELIVERY_LIST. |
| PAY_SYSTEM_LIST | Список доступных способов оплаты. Каждый элемент содержит информацию об оплате (ID, название, выбран ли и др.). Используется для выбора пользователем способа оплаты. |
| CURRENT_BUDGET_FORMATED | Отформатированный баланс пользователя (например, бонусный счёт или внутренний кошелёк). Используется, если доступна оплата с внутреннего счёта. |
| PROPERTY_LIST | Список свойств заказа (поля формы). Это имя, телефон, адрес и другие данные, которые пользователь должен заполнить. Используется для генерации формы оформления заказа. |
| TOTAL | Объект с итоговой информацией по заказу. Содержит сумму заказа, скидки, количество товаров, минимальную сумму и другие финансовые параметры. Используется для отображения итогов и проверок перед оформлением. |
| VALIDATION | Объект правил валидации. Ключ — это поле формы, значение — текст ошибки. Используется в методе validate для проверки заполненности обязательных полей. |
| ERROR_LIST | Список текущих ошибок при оформлении заказа. Заполняется при валидации или ответах сервера и отображается пользователю. |
| SHOW_DELIVERY_PRICE | Флаг, показывать ли стоимость доставки. Меняется в зависимости от выбранного способа оплаты. |
| IS_AUTHORIZED | Флаг авторизации пользователя. Показывает, залогинен ли пользователь, влияет на доступные действия и данные. |
| IS_ADMIN | Флаг администратора. Даёт дополнительные права, например доступ к определённым способам оплаты или доставки. |
| FORBIDDEN_SECTION_IDS | Список ID разделов (категорий), товары из которых запрещены для определённых условий. Используется для проверки корзины и ограничения доставки. |
| userCanBuy | Флаг, можно ли оформить заказ. Становится true, если заполнены обязательные поля и выбраны доставка и оплата. |
| basketSnapshot | Строка-снимок текущей корзины (ID товаров и количество). Используется для проверки, не изменилась ли корзина перед оформлением заказа. |
| hasForbiddenItems | Флаг наличия запрещённых товаров в корзине. Влияет на доступные способы доставки. |
| forbiddenItemsNames | Список названий запрещённых товаров. Используется для уведомления пользователя о проблемных позициях. |
В файле custom-ahv/components/
Папка location.selector/
| Файл | Описание |
|---|---|
| template.php | Основной шаблон выбора местоположения. Содержит текстовое поле для ввода города или адреса, скрытое поле с кодом выбранной локации и список подсказок. Используется для поиска и выбора местоположения через автодополнение. |
| script.js | Скрипт выпадающего списка вариантов местоположения. Получает список найденных локаций через items и отображает их пользователю. |
Папка order.delivery/
| Файл | Описание |
|---|---|
| template.php | Шаблон отображения способа доставки. Выводит карточку доставки с выбором, стоимостью, сроками и пунктами выдачи. |
| script.js | Обрабатывает выбор способа доставки, открытие списка пунктов выдачи и обновление оформления заказа после изменений. |
Папка order.paysystem/
| Файл | Описание |
|---|---|
| template.php | Выводит карточку оплаты с radio-кнопкой, логотипом, названием и описанием платёжной системы. |
| script.js | Обрабатывает выбор платёжной системы и запускает обновление оформления заказа для пересчёта зависимых данных. |
Папка order.property/
| Файл | Описание |
|---|---|
| template.php | Выводит поля формы оформления заказа: текстовые поля, email, телефон, адрес, radio/checkbox свойства и скрытое поле локации. |
| script.js | Обрабатывает работу полей формы, автоподсказки адреса через DaData, определение локации Bitrix, выбор адреса, генерацию атрибутов полей и работу enum-свойств (radio/checkbox). |
Дополнения в файле init.php :
Для случаев, когда требуется добавить значение или свойство в данные для фронтенда, то необходимо указать будет их в событии, срабатывающем каждый раз для SaleOrderAjax
| EventManager | Наименование события | Описание |
|---|---|---|
| OnSaleComponentOrderJsData | IdentifyBasketType | Обработчик события OnSaleComponentOrderJsData, который срабатывает при формировании данных заказа для фронтенда. Проходит по свойствам товаров в корзине и ищет свойство BASKET_TYPE. Если находит — записывает его значение в JS_DATA.TOTAL.BASKET_TYPE. Дополнительно по этому типу получает минимальную сумму заказа через Basket::getData и сохраняет её в JS_DATA.TOTAL.BASKET_MIN_PRICE. Используется для определения типа корзины и применения соответствующих ограничений (например, минимальной суммы заказа). |
Для тестировщика
Данный пункт служит для проверки корректности полного сценария работы страницы оформления заказа: от заполнения информации о покупателе и выбора адреса доставки до успешного оформления заказа по кнопке подтверждения.
Блок №1. Информация о клиенте
| Поле | Обязательное | Автозаполнение | Примечание |
|---|---|---|---|
| Фамилия | Да | Да. Берет значения из личного кабинета пользователя, либо из профиля покупателя. | Поля не объединяются в единое значение (раньше было единое поле «ФИО покупателя») и записываются по отдельности в информации о заказе: |
| Имя | Да | ||
| Отчество | Да | ||
| Телефон (мобильный) | Да | Не принимает иные символы, кроме числовых значений. | |
| Индекс | Да | Заполняется после выбора «Адреса доставки», либо из профиля покупателя. | |
| Адрес доставки | Да | Если выбрана доставка с выбором ПВЗ, то заполняется после выбора через кнопку. | |
| Комментарий к заказу | Нет | Нет | |
| Нет | Нет |
Блок №2. Способ доставки
Таблица правил работы с корзиной + внутренних настроек корзины для каждого из типов корзины:
| Тип корзины | Минимальная пороговая стоимость | Бесплатная доставка | Доставка |
|---|---|---|---|
| P1 – Семена | от 1000 ₽ | от 3000 ₽ | 300 ₽ |
| P2, P3, P4, P5 – Саженцы | от 10000 ₽ | 790 ₽ | |
| P6 – Саженцы | от 0 ₽ |
Таблица отображения кнопки «Выбрать пункт выдачи» у службы доставки и её профиля:
| Служба доставки | Тип доставки | Под какие типы корзин? |
|---|---|---|
| Почта России | без выбора ПВЗ | Все |
| с выбором ПВЗ (скрыт) | ||
| СДЭК | с выбором ПВЗ | |
| 5Post | с выбором ПВЗ | P1 – Семена |
| BoxBerry | – | – |
При выборе пункта доставки, если не заполнено поле «Адрес доставки», то по дефолту карта отображает г. Москва. Если же поле заполнено, то карта по возможности центрируется по указанному городу.
Блок №3. Способ оплаты
Стоимость доставки выводится тогда, когда покупатель имеет корзину на сумму меньше, чем пороговая стоимость для бесплатной доставки. Таблица с пороговым значением для бесплатной доставки указана в заголовке выше [Блок №2. Способ доставки]
| Под какие типы корзин? | Наименование оплаты | Стоимость доставки |
|---|---|---|
| P1 – Семена | СовкомБанк | 300 ₽ |
| Наложенный платеж | Расчет при получении (0 ₽) | |
| Плати частями | 300 ₽ | |
| ЮКасса | 300 ₽ | |
| P2, P3, P4, P5, P6 – Саженцы | СовкомБанк | 790 ₽ |
| Наложенный платеж | Расчет при получении (0 ₽) | |
| Плати частями | 790 ₽ | |
| ЮКасса | 790 ₽ |
Боковой блок оформления заказа
Условия работы кнопки офомления заказа
Ниже перечислены пункты условий…
| № | Описание | Что делает? |
|---|---|---|
| 1 | Сравнение стоимости заказа с минимально допустимым значением стоимости заказа. | Вывод сообщения ошибки |
| 2 | Проверка на заполненность обязательных полей | Вывод сообщения ошибки |
| 3 | Сравнение актуального типа корзины на странице оформления заказа и активного типа корзины на странице корзины | Перезагружает компоненты на странице оформления заказа и загружает новые данные |
| 4 | Пользователь не дал согласие на обработку данных | Вывод сообщения ошибки |
После нажатия кнопки срабатывают все указанные проверки. Большинство оповещают пользователя сообщением об ошибке:
Основные правила работы с корзиной
Ниже перечислены основные правила работы с корзиной, влияющие на оформление заказа:
| ID | Наименование | Описание |
|---|---|---|
| 110 | Бесплатная доставка СЕМЕНА (P1) | Если общая стоимость без учета доставки больше или равно 3000₽, то доставка бесплатная |
| 114 | Доставка Семена - 300руб | Товары для P1 – доставка 300₽ |
| 113 | Доставка при Наложенном платеже (Саженцы) | Применяет для всех 100% скидку при выбранном способе оплаты – «Наложенный платеж» |
| 115 | Доставка саженцы - 790 рублей | Если общая стоимость без учета доставки меньше 12000₽, то доставка = 790₽ для всех типов корзин, кроме P1 |
| 116 | Доставка Наложенный платеж Семена | Применяет для всех 100% скидку при выбранном способе оплаты – «Наложенный платеж» |
| 117 | Доставка рассады цветов – 790 рублей | Применяет для типа корзины P6 стоимость доставки = 790₽ |