Розробка портала об'ять на 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».
Компонент фільтра:
- Фасетні фільтри за властивостями інфоблока — для швидкості використовується модуль фасетного індекса (
iblock_facet) - Діапазони цін з повзунком
- Геофільтр — вибір міста/району або радіус на карті
- Сортування: за датою, ціною, релевантністю
- Збереження пошуку — користувач підписується на запит і отримує сповіщення про нові об'яви
Повнотекстовий пошук — Elasticsearch для автодовипадання, виправлення опечаток, пошуку за синонімами (наприклад, «однушка» → «1-кімнатна квартира»).
Для крупних порталів (100 000+ об'ять) фільтрація через стандартний CIBlockElement::GetList не підходить за продуктивністю. Рішення — вивіз даних у Elasticsearch або Sphinx, фільтрація на стороні пошукового рушія, віддача ID елементів назад у Бітрікс для відображення.
Особистий кабінет користувача
Особистий кабінет — другий за важливістю елемент після пошуку.
Функції кабінету:
- Мої об'яви — список з фільтрами за статусом, швидке редагування, продовження, знімання
- Улюблене — збережені об'яви інших користувачів
- Повідомлення — внутрішня переписка між покупцем та продавцем (без розкриття контактів до угоди)
- Сповіщення — нові повідомлення, зміна статусу об'яви, результати підписки на пошук
- Відгуки — рейтинг продавця по итогам угод
- Баланс та платежи — для монетизації через платні послуги
Внутрішня переписка реалізується через кастомний модуль або через модуль «Веб-мессенджер» (im) 1С-Бітрікса. Другий варіант дає real-time доставку, але інтерфейс вимагає кастомізації.
Монетизація
Безплатна площадка без монетизації — це убитковий проект. Моделі заробку:
Платні послуги для об'ять:
- Піднімання в пошуку (на N годин/днів)
- Виділення кольором або рамкою в ленті
- VIP-розміщення в топі розділу
- Збільшення ліміту фотографій
Підписки для продавців:
- Безплатний тариф: N об'ять на місяць
- Платний: безліміт + статистика переглядів + пріоритет у видачі
Реклама:
- Баннери в каталозі та на сторінках об'ять (модуль
advertising) - Контекстні блоки, прив'язані до категорій
Платежи приймаються через модуль «Інтернет-магазин» (sale): замовлення на послугу, оплата через платіжну систему (YooKassa, 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







