Розробка соціальної мережі на 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Розробка соціальної мережі на 1С-Бітрікс
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Розробка соціальної мережі на 1С-Bitrix

Соціальна мережа — один із найскладніших типів веб-застосунків за навантаженням на базу даних. Стрічка активностей, підписки, лайки, коментарі, сповіщення в реальному часі — кожна з цих функцій потребує нетривіальних архітектурних рішень. 1С-Bitrix має вбудований модуль «Соціальна мережа» (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 (множинне).

Стрічка активностей

Вбудована жива стрічка Bitrix — хороша основа. Але для кастомної соціальної мережі зазвичай потрібен інший алгоритм формування стрічки. Два підходи:

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 для лайків. Краще використовувати її, ніж винаходити свою — Bitrix автоматично відображає лічильники лайків в інтерфейсах.

// Поставити лайк через 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 через Bitrix Push Server. У корпоративних інсталяціях Bitrix24 доступний 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 днів