Разработка сайта цветочного магазина на 1С-Битрикс
Половина заказов в цветочном магазине — подарки. Покупатель не знает, какие цветы хочет. Он знает повод, бюджет и время, к которому букет должен быть у получателя. Сайт, который помогает выбрать и гарантирует доставку к точному часу, забирает клиента у агрегаторов. Сайт-витрина с каталогом и кнопкой «позвонить» — нет.
Конструктор букета, доставка с временными окнами и CRM-напоминания о годовщинах — три вещи, которые превращают цветочный сайт из витрины в рабочий инструмент продаж. На 1С-Битрикс проект строится на торговом каталоге с SKU, кастомном конструкторе на Highload-блоках, расширенных службах доставки sale и интеграции с CRM для повторных заказов.
Каталог готовых букетов
Готовые букеты — товары торгового каталога. Один букет «Весеннее настроение» существует в трёх размерах: S (5 тюльпанов), M (11 тюльпанов), L (21 тюльпан). Каждый SKU — своя цена, фото и состав. Торговые предложения Битрикс закрывают это штатно.
Свойства элемента инфоблока «Букеты»:
- Категория — раздел: букеты, композиции в коробке, корзины, монобукеты, свадебные
- Повод — множественный справочник: день рождения, свадьба, юбилей, без повода, 8 марта, 14 февраля
- Основные цветы — множественный справочник: розы, тюльпаны, пионы, хризантемы
- Цветовая гамма — множественный: красный, белый, розовый, микс, пастельные
- Стойкость — числовое (дней), отображается как «стоит от X дней»
- Наличие — обновляется ежедневно. Цветы — скоропортящийся товар, наличие вчера ничего не значит сегодня
Фильтрация через CIBlockSmartFilter: по поводу, виду цветов, цветовой гамме, цене. Сортировка: популярные (по количеству заказов — поле обновляется агентом ежедневно), новинки, цена. Для 200–400 позиций каталога фасетный индекс отрабатывает мгновенно.
Сезонное ценообразование. Розы 7 марта стоят вдвое дороже, чем 10 марта. Механизм — типы цен в торговом каталоге: «Основная» и «Праздничная». Обработчик OnSaleBasketBeforeSaved проверяет дату заказа по справочнику праздников в HL-блоке и подставляет нужный тип цены. Администратор задаёт праздничные цены за неделю до события — на сайте они включаются автоматически по дате.
Конструктор букета
Центральная функция сайта. Клиент выбирает цветы поштучно, задаёт оформление — и видит визуализацию с ценой. Кастомная разработка на двух Highload-блоках.
HL-блок «Цветы для конструктора»:
| Поле | Тип | Назначение |
|---|---|---|
| UF_NAME | Строка | Роза красная, Тюльпан белый, Пион розовый |
| UF_PRICE | Число | Цена за штуку |
| UF_IMAGE | Файл | Фото для каталога конструктора |
| UF_RENDER_IMAGE | Файл | Вырезанный цветок на прозрачном фоне — для визуализации |
| UF_CATEGORY | Список | roses / tulips / peonies / greens / exotic |
| UF_AVAILABLE | Булево | В наличии сегодня |
| UF_MIN_QTY | Целое | Минимум (обычно 1) |
| UF_SEASON | Список (мн.) | spring / summer / autumn / winter / all |
HL-блок «Оформление»:
| Поле | Тип | Назначение |
|---|---|---|
| UF_TYPE | Список | wrapping / ribbon / basket / box |
| UF_NAME | Строка | Крафт-бумага, Фетр, Шляпная коробка |
| UF_PRICE | Число | Стоимость |
| UF_IMAGE | Файл | Превью |
| UF_COMPATIBLE | Строка | JSON — ограничения (шляпная коробка не для 51 розы) |
Логика работы:
-
Выбор цветов. Два столбца: слева — каталог с фильтром по категории и сезону, справа — корзина конструктора. Кнопки «+» / «-» у каждого цветка. Минимум 3 стебля для букета — валидация на клиенте и сервере.
-
Оформление. Карточки: тип обёртки (крафт, фетр, сетка, без), тип завязки (лента, бечёвка). Для коробок и корзин — ограничение по количеству стеблей из
UF_COMPATIBLE. -
Визуализация. Два подхода в зависимости от бюджета. Оптимальный: предзаготовленные шаблоны для каждой комбинации «размер × оформление», выбранные цветы — иконками рядом. Хватает для 90% клиентов. Расширенный: Canvas-рендер. Изображения цветков на прозрачном фоне размещаются по алгоритму: центральные — крупнее, боковые — под углом, зелень — на заднем плане. Требует качественных рендеров в едином стиле.
-
Открытка. Текстовое поле до 200 символов, превью на шаблоне (выбор из 4–5 дизайнов). Текст сохраняется как свойство заказа.
-
Расчёт:
Итого = Σ(цена_цветка × кол-во) + оформление + открытка + доставка. Серверный через AJAX-контроллер. Клиентский JS показывает приблизительную сумму для мгновенной обратной связи, финальная цена — с сервера. -
Оформление заказа. Конфигурация сохраняется в JSON, добавляется в корзину
saleкак товар с произвольной ценой (CSaleBasket::AddсCUSTOM_PRICE = Y). Конфигурация отображается в письме подтверждения и в админке.
Доставка с точными временными окнами
Доставка цветов — это не «в течение дня». Букет к 19:00 на день рождения — значит к 19:00, а не к 21:00. Стандартный обработчик sale.delivery расширяется кастомной логикой.
Четыре типа доставки:
- Стандартная — 2-часовое окно (10:00–12:00, 12:00–14:00, ..., 20:00–22:00). Минимум 4 часа до начала окна
- Срочная — в течение 90 минут. Наценка. Доступна с 09:00 до 20:00
- К точному времени — допуск ±15 минут. Для VIP-заказов (юбилеи, предложения)
- Самовывоз — без наценки
Кастомный календарь: доставка «сегодня» (если есть окна) и на 14 дней вперёд. Праздничные даты (8 марта, 14 февраля) помечены — «высокий спрос, рекомендуем заказать заранее». Наценка за срочную доставку в эти дни увеличивается автоматически через обработчик OnSaleDeliveryServiceCalculate, который проверяет дату по HL-блоку праздников.
Интеграция с курьерскими службами. Для собственной доставки — внутренняя логистика. Для внешних (Dostavista, Яндекс.Доставка) — API-интеграция: автоматическое создание заявки после оплаты, получение трек-номера, webhook со статусами. Клиент в личном кабинете видит: «Курьер забрал заказ», «Курьер в пути», «Доставлено».
Анонимный заказ. Цветы часто заказывают как сюрприз. Чекбокс «Не сообщать отправителя» — в данных доставки только получатель.
Учёт свежести и ротация каталога
Цветы — товар с ограниченным сроком жизни. Роза живёт в магазине 5–7 дней после поставки. Свойство PROPERTY_ARRIVAL_DATE в инфоблоке фиксирует дату прихода партии. Агент ежедневно проверяет: если с момента поступления прошло больше N дней (задаётся для каждого вида цветов), товар деактивируется.
На практике это означает, что каталог каждое утро актуален. Клиент не увидит букет из пионов, если пионы закончились вчера. Для администратора — кнопка «Приёмка» в админке: выбрал вид цветов, указал количество, дата проставилась автоматически.
CRM-интеграция и напоминания
Цветочный бизнес живёт повторными заказами. Клиент, заказавший букет жене на день рождения, с вероятностью 60–70% сделает это через год. CRM Битрикс24 фиксирует каждый заказ как сделку: получатель, повод, дата.
За 7 дней до годовщины — email: «Год назад вы заказывали букет для Анны. Повторить?» Агент ежедневно выбирает сделки, где UF_EVENT_DATE = текущая дата + 7 дней − 1 год, и инициирует отправку через messageservice.
В карточке заказа — свойства: имя получателя, повод, дата события. Данные заполняются при оформлении (поля «Кому» и «Повод» уже в форме — нужно только сохранить в CRM).
Технические сроки
| Этап | Задачи | Срок |
|---|---|---|
| Аналитика | Структура каталога, логика конструктора, интеграции | 3–4 дня |
| Дизайн | UI конструктора, каталог, корзина, мобильная версия | 7–10 дней |
| Вёрстка | Адаптив, canvas-рендер (при расширенном варианте) | 7–10 дней |
| Backend | HL-блоки, контроллеры, доставка, CRM, учёт свежести | 10–14 дней |
| Контент | Фотосъёмка букетов, рендеры для конструктора | 5–7 дней |
| Тестирование | Расчёты, доставка, оплата, CRM-цепочки | 4–5 дней |
Композитный кеш — для каталога и статики. Конструктор, корзина, доставка — AJAX. Микроразметка Product и AggregateOffer для товарной выдачи. Экспорт в Яндекс.Маркет / Google Merchant через стандартный YML/XML торгового каталога Битрикс. Стоимость рассчитывается индивидуально — зависит от варианта визуализации конструктора, количества интеграций и наличия собственной курьерской службы.







