Налаштування відеогалереї товару 1С-Бітрікс

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

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

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

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

  • 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С-Бітрікс

Коли у товара три відеообзори, монтажне відео та розпакування — одного свойства VIDEO_URL вже не хватає. Потрібна галерея: переключення між роликами, превью-мініатюри, синхронізація з фотогалереєю. У Бітріксі немає готового компонента для цього, тому рішення собирається з інфраструктури інфоблоків та користувацького шаблону.

Зберігання кількох відео в інфоблоці

Для множественного відео використовується властивість типу S (рядок) з прапором MULTIPLE = Y. Символьний код — VIDEO_GALLERY. У таблиці b_iblock_element_property кожне відео зберігається окремим рядком з одним IBLOCK_ELEMENT_ID. Отримати всі значення:

$videos = [];
$res = \Bitrix\Iblock\ElementPropertyTable::getList([
    'filter' => [
        'IBLOCK_ELEMENT_ID' => $elementId,
        'CODE'              => 'VIDEO_GALLERY',
    ],
    'select' => ['VALUE', 'DESCRIPTION'],
    'order'  => ['ID' => 'ASC'],
]);
while ($row = $res->fetch()) {
    $videos[] = $row;
}

Поле DESCRIPTION використовується як підпис до відео — це стандартне поле для множественних властивостей, редагується прямо в карточці елемента.

Структура галереї: превью + основний плеєр

Класичний паттерн — великий плеєр-слот зверху, ряд мініатюр знизу. При клику на мініатюру основний слот заміняє вміст. Превью беруться з thumbnail API відповідного хостингу.

Шаблон компонента catalog.element, блок галереї:

<?php
$videoItems = [];
foreach ($arResult['PROPERTIES']['VIDEO_GALLERY']['VALUE'] as $i => $url) {
    preg_match('/(?:v=|youtu\.be\/)([a-zA-Z0-9_-]{11})/', $url, $m);
    if (!empty($m[1])) {
        $videoItems[] = [
            'id'    => $m[1],
            'desc'  => $arResult['PROPERTIES']['VIDEO_GALLERY']['DESCRIPTION'][$i] ?? '',
            'thumb' => "https://img.youtube.com/vi/{$m[1]}/mqdefault.jpg",
        ];
    }
}
?>
<?php if ($videoItems): ?>
<div class="video-gallery" id="videoGallery">
    <div class="video-gallery__main" data-active="<?= $videoItems[0]['id'] ?>">
        <!-- iframe з'явиться по клику через JS -->
    </div>
    <div class="video-gallery__thumbs">
        <?php foreach ($videoItems as $idx => $v): ?>
        <button class="video-gallery__thumb <?= $idx === 0 ? 'is-active' : '' ?>"
                data-video-id="<?= $v['id'] ?>"
                aria-label="<?= htmlspecialcharsEx($v['desc']) ?>">
            <img src="<?= $v['thumb'] ?>" loading="lazy" alt="">
        </button>
        <?php endforeach; ?>
    </div>
</div>
<?php endif; ?>

Поєднання відеогалереї з фотогалереєю

Магазини хочуть єдиної галереї: спочатку фото, потім відео. У компоненті catalog.element фото йдуть з $arResult['MORE_PHOTO'] — масив шляхів до картинок. Відео-мініатюри додаються в кінець того ж контейнера слайдера, але з атрибутом data-type="video". JavaScript обробляє клік: якщо data-type === 'video' — ініціалізує iframe, іншому — показує зображення.

Це дозволяє використовувати один екземпляр Swiper або Splide для обох типів контенту без дублювання логіки.

Кеш та права доступу

Множественне властивість читається в межах кешуємого блока. Проблема виникає при редагуванні: менеджер додав відео в админці, але кеш не сбросился. Обов'язково реєструвати тег:

$this->SetResultCacheKeys(['PROPERTIES']);
$GLOBALS['CACHE_MANAGER']->RegisterTag('iblock_id_' . CATALOG_IBLOCK_ID);

Подія OnAfterIBlockElementUpdate в модулі iblock sbросит тег при збереженні елемента.

Vimeo та інші хостинги

Якщо частина відео на Vimeo, thumbnail грузиться через API https://vimeo.com/api/v2/video/{id}.json. Це синхронний запрос — робити його в шаблоні не можна. Правильний підхід: фоновий агент Бітрікса (CAgent) обходит властивості галереї, запитує thumbnail і зберігає URL в окрему множественну властивість VIDEO_THUMB. Шаблон читає вже готові превю без зовнішніх запросів при рендерінгу.