Настройка видеообзоров в карточке товара 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка видеообзоров в карточке товара 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • 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С-Битрикс

Карточка товара грузит YouTube-iframe, и только тогда пользователь понимает, что обзор вообще есть. Первый кадр не показан, плеер тормозит мобильный LCP на 2–4 секунды, а в «Яндекс.Метрике» видно, что 80% уходят до автовоспроизведения. Это не проблема видео — это проблема того, как Битрикс встраивает медиа в карточку.

Где хранится видео в инфоблоке

Битрикс не имеет нативного поля типа «видео» в стандартных типах свойств. Чаще всего видеообзор хранится в одном из трёх мест:

  • Свойство типа S (строка) с URL на YouTube/Vimeo — самый распространённый вариант
  • Свойство типа F (файл) — прямая загрузка mp4 на сервер, таблица b_iblock_element_property
  • Поле детального описания (HTML/TinyMCE) — видео зарыто в b_iblock_element.DETAIL_TEXT

Для интернет-магазина на bitrix.catalog правильный путь — отдельное свойство с символьным кодом, например VIDEO_URL, привязанное к инфоблоку каталога. Запрос к нему через CIBlockElement::GetProperty() или через \Bitrix\Iblock\ElementPropertyTable (D7):

$props = \Bitrix\Iblock\ElementPropertyTable::getList([
    'filter' => ['IBLOCK_ELEMENT_ID' => $elementId, 'CODE' => 'VIDEO_URL'],
    'select' => ['VALUE'],
])->fetch();

Lazy-load превью вместо iframe

Главная проблема — <iframe src="https://www.youtube.com/embed/..."> блокирует основной поток. Решение: рендерить кастомное превью через thumbnail API YouTube (https://img.youtube.com/vi/{VIDEO_ID}/hqdefault.jpg) и подменять его на iframe только по клику.

В шаблоне компонента catalog.element (файл template.php) логика такая:

<?php if (!empty($arResult['PROPERTIES']['VIDEO_URL']['VALUE'])): ?>
<?php
    $videoUrl = $arResult['PROPERTIES']['VIDEO_URL']['VALUE'];
    preg_match('/(?:v=|youtu\.be\/)([a-zA-Z0-9_-]{11})/', $videoUrl, $matches);
    $videoId = $matches[1] ?? '';
?>
<div class="product-video" data-video-id="<?= htmlspecialchars($videoId) ?>">
    <img src="https://img.youtube.com/vi/<?= $videoId ?>/hqdefault.jpg"
         loading="lazy" alt="Видеообзор товара" class="video-preview">
    <button class="video-play-btn" aria-label="Воспроизвести видео">▶</button>
</div>
<?php endif; ?>

JavaScript по клику заменяет div на iframe с autoplay=1. Это убирает лишний HTTP-запрос к YouTube при загрузке страницы и снижает вес страницы на 500–800 KB (YouTube загружает свой JS-бандл при любом iframe).

Кеширование и инвалидация

Шаблон catalog.element кешируется через CBitrixComponent::StartResultCache(). Если видео меняется в админке, кеш не сбрасывается автоматически — нужно либо прописать $this->AbortResultCache() при пустом VIDEO_URL, либо добавить тег кеша:

$GLOBALS['CACHE_MANAGER']->RegisterTag('iblock_id_' . $iblockId);

Тогда при сохранении элемента инфоблока (событие OnAfterIBlockElementUpdate) кеш сбрасывается корректно.

Видео в товарных вариациях (торговые предложения)

Если SKU-вариации (таблица b_catalog_product, тип P — предложение) имеют разные видео, нужно грузить свойство не родительского элемента, а конкретного предложения. Стандартный catalog.element этого не делает — он отдаёт свойства только основного товара. Решение: AJAX-запрос при смене SKU к кастомному экшну или компоненту, который возвращает VIDEO_URL для выбранного offerId.

В компоненте bitrix:catalog.element параметр OFFER_IBLOCK_ID указывает на инфоблок предложений — оттуда и нужно тянуть медиа-свойства.

Structured Data для видео

Google индексирует видео в карточке, если есть разметка VideoObject. Битрикс не генерирует её автоматически. Добавляется в шаблон вручную:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "<?= htmlspecialcharsEx($arResult['NAME']) ?>",
  "thumbnailUrl": "https://img.youtube.com/vi/<?= $videoId ?>/hqdefault.jpg",
  "uploadDate": "<?= date('Y-m-d') ?>",
  "embedUrl": "https://www.youtube.com/embed/<?= $videoId ?>"
}
</script>

Это даёт шанс попасть в видео-карусель поиска без сторонних плагинов.