Разработка портала объявлений на 1С-Битрикс
Человек хочет продать диван. Фотографирует, пишет описание, заходит на сайт — и упирается в форму из 30 полей, половина которых непонятна. Бросает. Идёт на Avito. Если портал объявлений теряет пользователя на этапе подачи — всё остальное (модерация, поиск, монетизация) не имеет значения. Проектирование классифайда на 1С-Битрикс начинается с пользовательского сценария, а не с архитектуры базы данных.
Архитектура контентной модели
Классифайд — это каталог пользовательского контента с категориями, где у каждой категории свой набор характеристик. Автомобиль описывается маркой, моделью, годом выпуска, пробегом. Квартира — площадью, этажом, количеством комнат. Смартфон — моделью, состоянием, объёмом памяти.
В 1С-Битрикс это реализуется через инфоблоки с пользовательскими свойствами:
- Один инфоблок — все объявления, категория определяется секцией
- Динамические свойства — набор свойств зависит от выбранной категории. Реализуется через множественные свойства с привязкой видимости к секции (фронтенд-логика) или через отдельные инфоблоки под каждую крупную категорию
Второй подход предпочтительнее для порталов с принципиально разными типами товаров (авто, недвижимость, услуги). Каждый инфоблок — чистая схема свойств, индексы заточены под конкретные фильтры, нет «мусорных» пустых полей.
Элемент объявления содержит:
- Заголовок, описание, цена (с валютой)
- Категория + подкатегория (секции инфоблока, до 3–4 уровней)
- Фотографии (множественное свойство типа «Файл», до 10–20 изображений)
- Геолокация (город, район — справочник или координаты для карты)
- Контакты продавца (телефон, мессенджер — скрыты до авторизации)
- Статус: черновик, на модерации, активно, продано, снято, заблокировано
- Тип объявления: частное / от компании
- Срок размещения и дата истечения
Подача объявления — критический сценарий
Форма подачи должна быть пошаговой:
- Выбор категории — дерево с поиском, популярные категории вынесены отдельно
- Заполнение полей — только релевантные для выбранной категории, обязательные поля минимизированы
- Загрузка фото — drag-and-drop, обрезка, поворот, сжатие на клиенте перед отправкой
- Предпросмотр — как будет выглядеть объявление в поиске и на странице
- Публикация — с опциональным выбором платных услуг (поднятие, выделение)
Реализуется через кастомный компонент на базе bitrix:iblock.element.add.form или полностью кастомную форму с REST API на фронтенде. Второй вариант даёт контроль над UX — валидация на лету, прогресс-бар загрузки фото, автосохранение черновика.
Автосохранение. Пользователь заполнил половину формы, закрыл вкладку. При возвращении — черновик на месте. Реализуется через localStorage + сохранение на сервер каждые 30 секунд через AJAX.
Модерация
Пользовательский контент без модерации — это спам, мошенничество и запрещённые товары в первый же день.
Многоуровневая система модерации:
- Автоматическая фильтрация — стоп-слова, проверка на дубликаты (сравнение хешей фото и текста), детектор телефонных номеров в тексте (попытка обойти скрытие контактов)
- Ручная премодерация — для новых пользователей (первые 3–5 объявлений)
- Постмодерация — для пользователей с историей, объявление публикуется сразу, но попадает в очередь проверки
- Жалобы пользователей — кнопка «Пожаловаться» с выбором причины, автоскрытие при пороге жалоб
| Тип проверки | Момент | Реализация |
|---|---|---|
| Стоп-слова | При сохранении | Обработчик OnBeforeIBlockElementAdd |
| Дубликат фото | При загрузке | Perceptual hash (pHash), сравнение с базой |
| Дубликат текста | При сохранении | Шинглы или MinHash |
| Телефон в тексте | При сохранении | Regex-фильтр |
| Ручная модерация | После подачи | Очередь в админке с bulk-действиями |
| Жалобы | После публикации | Счётчик жалоб, порог автоскрытия |
Модераторский интерфейс — отдельная страница в административном разделе с фильтрами по статусу, категории, дате. Горячие клавиши для быстрой обработки: одобрить, отклонить, запросить правки.
Поиск и фильтрация
Поиск — основной способ навигации. Пользователь не листает каталог, а задаёт параметры: «квартира, 2 комнаты, Минск, до $50 000».
Компонент фильтра:
- Фасетные фильтры по свойствам инфоблока — для скорости используется модуль фасетного индекса 1С-Битрикс (
iblock_facet) - Диапазоны цен с ползунком
- Геофильтр — выбор города/района или радиус на карте
- Сортировка: по дате, по цене, по релевантности
- Сохранение поиска — пользователь подписывается на запрос и получает уведомления о новых объявлениях
Полнотекстовый поиск — Elasticsearch для автодополнения, исправления опечаток, поиска по синонимам (например, «однушка» → «1-комнатная квартира»).
Для крупных порталов (100 000+ объявлений) фильтрация через стандартный CIBlockElement::GetList не подходит по производительности. Решение — вынос данных в Elasticsearch или Sphinx, фильтрация на стороне поискового движка, отдача ID элементов обратно в Битрикс для отображения.
Личный кабинет пользователя
Личный кабинет — второй по важности элемент после поиска.
Функции кабинета:
- Мои объявления — список с фильтрами по статусу, быстрое редактирование, продление, снятие
- Избранное — сохранённые объявления других пользователей
- Сообщения — внутренняя переписка между покупателем и продавцом (без раскрытия контактов до сделки)
- Уведомления — новые сообщения, изменение статуса объявления, результаты подписки на поиск
- Отзывы — рейтинг продавца по итогам сделок
- Баланс и платежи — для монетизации через платные услуги
Внутренняя переписка реализуется через кастомный модуль или через модуль «Веб-мессенджер» (im) 1С-Битрикс. Второй вариант даёт real-time доставку, но интерфейс требует кастомизации.
Монетизация
Бесплатная площадка без монетизации — это убыточный проект. Модели заработка:
Платные услуги для объявлений:
- Поднятие в поиске (на N часов/дней)
- Выделение цветом или рамкой в ленте
- VIP-размещение в топе раздела
- Увеличение лимита фотографий
Подписки для продавцов:
- Бесплатный тариф: N объявлений в месяц
- Платный: безлимит + статистика просмотров + приоритет в выдаче
Реклама:
- Баннеры в каталоге и на страницах объявлений (модуль
advertising1С-Битрикс) - Контекстные блоки, привязанные к категориям
Платежи принимаются через модуль «Интернет-магазин» (sale) 1С-Битрикс: заказ на услугу, оплата через платёжную систему (ЮKassa, CloudPayments, Stripe), автоматическое применение услуги после оплаты. Рекуррентные платежи для подписок — через токенизацию карты.
Баланс пользователя. Внутренний счёт, пополняемый через платёжную систему. Списание — при активации услуги. Реализуется через внутренние счета модуля sale или кастомную таблицу.
SEO для классифайда
Портал объявлений генерирует тысячи страниц. SEO-стратегия:
- Уникальный title и description для каждого объявления — шаблонизация из свойств: «{Название} — купить в {Город}, цена {Цена} руб.»
-
ЧПУ —
/category/subcategory/id-slug/ -
Фильтры как посадочные страницы —
/kvartiry/minsk/2-komnatnye/— отдельная страница с мета-тегами, а не параметр в URL - Noindex для пустых категорий и снятых объявлений
- Sitemap — динамическая генерация, обновление при каждой публикации/снятии
-
Микроразметка
ProductилиOfferпо Schema.org
Производительность и масштабирование
Портал объявлений — это высоконагруженный проект. 100 000 объявлений × 5 фото = 500 000 файлов. Тысячи одновременных поисковых запросов с фильтрацией.
Стек оптимизации:
- Композитный кэш для страниц объявлений и категорий
- Фасетный индекс для быстрой фильтрации
- Elasticsearch/Sphinx для полнотекстового поиска
- CDN для изображений с автоматическим ресайзом (через
BX_RESIZE_IMAGE_PROPORTIONALили внешний сервис типа imgproxy) - Очереди — обработка фото, отправка уведомлений, индексация в поисковом движке — через агенты 1С-Битрикс или RabbitMQ
- Отдельный сервер БД, реплика для чтения при нагрузке свыше 500 RPS







