Разработка социальной сети на 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка социальной сети на 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1181
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    813
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Разработка социальной сети на 1С-Битрикс

Социальная сеть — один из самых сложных типов веб-приложений по нагрузке на базу данных. Лента активностей, подписки, лайки, комментарии, уведомления в реальном времени — каждая из этих функций требует нетривиальных архитектурных решений. 1С-Битрикс имеет встроенный модуль «Социальная сеть» (socialnetwork), который покрывает значительную часть базового функционала. Вопрос — насколько глубокая кастомизация нужна.

Встроенный модуль socialnetwork

Модуль socialnetwork входит в редакции «Бизнес» и выше. Он предоставляет:

  • Группы пользователей (не путать с группами доступа) — аналог сообществ.
  • Ленту живой ленты (b_sonet_log, b_sonet_log_right, b_sonet_log_event).
  • Систему подписок (b_sonet_subscription).
  • Сообщения (b_sonet_message).
  • Контакты/друзья (b_sonet_relations).
  • Рабочие группы.

Если функционал встроенного модуля достаточен — используем его, не изобретаем велосипед. Если нужна глубокая кастомизация UI/UX или нестандартная логика — строим поверх или рядом.

Профиль пользователя

Расширенный профиль пользователя — через UF-поля (пользовательские поля таблицы b_user_field). Добавляются в административной части или программно:

$userType = new \CUserTypeEntity();
$userType->Add([
    'ENTITY_ID'        => 'USER',
    'FIELD_NAME'       => 'UF_AVATAR_FULL',
    'USER_TYPE_ID'     => 'file',
    'XML_ID'           => 'UF_AVATAR_FULL',
    'SORT'             => 100,
    'MULTIPLE'         => 'N',
    'MANDATORY'        => 'N',
    'SHOW_FILTER'      => 'N',
    'SHOW_IN_LIST'     => 'N',
    'EDIT_IN_LIST'     => 'Y',
    'IS_SEARCHABLE'    => 'N',
    'SETTINGS'         => ['EXTENSIONS' => 'jpg,jpeg,png,gif,webp'],
    'EDIT_FORM_LABEL'  => ['ru' => 'Фото профиля', 'en' => 'Profile photo'],
]);

Типовые UF-поля профиля для социальной сети: UF_ABOUT, UF_CITY, UF_WEBSITE, UF_SOCIAL_VK, UF_SOCIAL_TG, UF_INTERESTS (множественное).

Лента активностей

Встроенная живая лента Битрикс — хорошая основа. Но для кастомной социальной сети обычно нужен другой алгоритм формирования ленты. Два подхода:

Pull-модель (простая). Пользователь открывает ленту — запрос к БД собирает события от всех, на кого подписан:

// Получить ID пользователей, на которых подписан текущий
$subscriptions = \Bitrix\Socialnetwork\UserToUserTable::getList([
    'filter' => [
        'FROM_USER_ID' => $currentUserId,
        'RELATION'     => \Bitrix\Socialnetwork\UserToUserTable::RELATION_SUBSCRIBED,
    ],
    'select' => ['TO_USER_ID'],
])->fetchAll();

$followedIds = array_column($subscriptions, 'TO_USER_ID');
$followedIds[] = $currentUserId; // Свои посты тоже в ленте

// Получить посты
$posts = FeedPostTable::getList([
    'filter'  => ['AUTHOR_ID' => $followedIds, 'IS_DELETED' => false],
    'order'   => ['CREATED_AT' => 'DESC'],
    'limit'   => 20,
    'offset'  => $page * 20,
])->fetchAll();

Push-модель (масштабируемая). При публикации поста — добавить запись в таблицу b_local_feed_{userId} для каждого подписчика. Лента пользователя = его личная таблица. Дорого при записи, быстро при чтении. Для большой аудитории (1000+ подписчиков у одного автора) — гибридная схема.

Посты и контент

HL-блок для постов:

class FeedPostTable extends \Bitrix\Main\ORM\Data\DataManager
{
    public static function getTableName(): string { return 'b_hl_social_post'; }

    public static function getMap(): array
    {
        return [
            new IntegerField('ID', ['primary' => true, 'autocomplete' => true]),
            new IntegerField('AUTHOR_ID'),
            new TextField('CONTENT'),           // Текст поста
            new StringField('CONTENT_TYPE'),    // text | html
            new BooleanField('IS_DELETED', ['values' => [false, true]]),
            new IntegerField('LIKES_COUNT'),
            new IntegerField('COMMENTS_COUNT'),
            new IntegerField('REPOSTS_COUNT'),
            new DatetimeField('CREATED_AT'),
            new DatetimeField('UPDATED_AT'),
            new StringField('PRIVACY'),         // public | friends | private
        ];
    }
}

Медиавложения к постам — отдельная таблица b_hl_social_post_media с полями: POST_ID, TYPE (image/video/file), FILE_ID (ссылка на b_file), SORT.

Лайки и реакции

Встроенный модуль socialnetwork имеет таблицу b_rating_vote для лайков. Лучше использовать её, чем изобретать свою — Битрикс автоматически отображает счётчики лайков в интерфейсах.

// Поставить лайк через API модуля rating
\Bitrix\Main\Loader::includeModule('rating');
$rating = new \CRating('BLOG_COMMENT', $postId, $authorId);
$rating->Like($currentUserId, 1);

Если нужны реакции (❤️, 😂, 😮) — отдельная таблица b_hl_social_reactions с типом реакции.

Уведомления в реальном времени

Для уведомлений без перезагрузки страницы — два варианта:

Long polling. Клиент периодически (раз в 10-30 сек) спрашивает сервер о новых уведомлениях. Просто реализовать, работает везде.

WebSocket через Битрикс Push Server. В корпоративных инсталляциях Битрикс24 доступен Push & Pull Server — WebSocket-сервер. Интеграция через JS-модуль BX.PullClient.

BX.ready(() => {
    BX.PullClient.subscribe({
        moduleId: 'local.social',
        callback: (data) => {
            if (data.command === 'new_notification') {
                showNotification(data.params);
                updateNotificationCounter();
            }
        }
    });
});

На сервере при событии (лайк, комментарий, подписка):

\Bitrix\Pull\Event::add($targetUserId, [
    'module_id' => 'local.social',
    'command'   => 'new_notification',
    'params'    => [
        'type'       => 'like',
        'from_user'  => $fromUserId,
        'entity_id'  => $postId,
        'message'    => $fromUserName . ' оценил ваш пост',
    ],
]);
\Bitrix\Pull\Event::send();

Система подписок

Отношения подписчик-автор — через \Bitrix\Socialnetwork\UserToUserTable или собственную таблицу. Важные состояния: подписан, подписка на рассмотрении (для закрытых аккаунтов), заблокирован.

Сроки разработки

Вариант Состав Срок
На базе socialnetwork Профили, группы, лента — через встроенный модуль 15–25 дней
Кастомная соцсеть Посты, подписки, лайки, уведомления, своя лента 40–60 дней
Полная платформа + Мессенджер, сторис, рекомендательная система 80–120 дней