Інтеграція Vue.js із шаблоном сайту 1С-Бітрікс

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

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

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

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

  • 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

Інтеграція Vue.js з шаблоном сайту 1С-Бітрікс

Головна складність інтеграції Vue в шаблон Бітрікс — конфлікт між глобальним станом jQuery-плагінів, які Бітрікс використовує повсюдно, та реактивністю Vue. Також важливий порядок завантаження скриптів, яким Бітрікс керує через власний менеджер ресурсів.

Підключення Vue до шаблону без конфліктів

У header.php шаблону Бітрікс додайте Vue як модуль через asset-менеджер:

\Bitrix\Main\Page\Asset::getInstance()->addJs('/local/templates/main/vue-dist/app.js', true);

Прапор true — скрипт переміщується в кінець <body>, це важливо для Vue, якому потрібен DOM.

Альтернатива — BX.ready(), обгортка Бітрікс над DOMContentLoaded:

BX.ready(function() {
    const { createApp } = Vue;
    createApp(App).mount('#vue-app');
});

Точки монтування в шаблоні

У шаблоні Бітрікс (.php-файли) розставте div-контейнери для Vue-віджетів:

// У шаблоні header.php або в потрібному місці сторінки
<div id="vue-search-widget" data-catalog-id="<?= $catalogId ?>"></div>

Vue-застосунок зчитує атрибути через el.dataset:

const el = document.getElementById('vue-search-widget');
const catalogId = el.dataset.catalogId;
createApp(SearchWidget, { catalogId }).mount(el);

Передача CSRF-токена

Бітрікс генерує CSRF-токен для захисту форм. При AJAX-запитах з Vue його необхідно передавати:

// Отримання токена з cookie (Бітрікс зберігає в bitrix_sessid)
function getBitrixToken() {
    return document.querySelector('input[name="sessid"]')?.value
        || BX.bitrix_sessid?.();
}

// В axios-конфігу:
axios.defaults.headers.common['X-Bitrix-Csrf-Token'] = getBitrixToken();

Конфлікт з jQuery та BX.UI

Бітрікс використовує window.BX — власний namespace з утилітами, та jQuery. Vue безпосередньо з ними не конфліктує, але:

  • Не використовуйте jQuery для маніпуляції DOM всередині Vue-компонентів — Vue втрачає реактивність
  • BX.UI.Dialog, BX.PopupWindow — можна викликати з Vue через onMounted/події, але не з шаблону

Приклад із практики

Корпоративний сайт на Бітрікс: додали Vue-віджет підбору продукту в шаблон. Віджет працював, але після відкриття модального вікна Бітрікс (BX.PopupWindow) реактивність Vue ламалась — popup клонував DOM-елемент точки монтування. Рішення: монтування Vue-віджета в document.body через teleport, а не всередину елемента, який міг бути клонований.

Терміни виконання

Інтеграція Vue в існуючий шаблон з одним-двома віджетами — від 4 до 8 годин.