Использование Vue.js в проектах на Битрикс

Внимание! Работает режим премодерации. Все сообщения публикуются после проверки!
Страницы: 1
Ответить
RSS
Использование Vue.js в проектах на Битрикс
Vue.js в Битриксе: интеграция современного фронтенда в классическую CMS

Цель статьи — дать рабочий подход: после прочтения вы сможете добавить динамический фронтенд на Битрикс (динамические формы, фильтры каталога, корзина, личный кабинет) на реальном проекте — без магии и за рамками hello world.
Этот Vue-компонент отображает корзину товаров с возможностью  динамического изменения количества товаров через AJAX-запросы к  компоненту Битрикса, с мгновенным пересчетом общей суммы.
Код
<?php
// /local/components/my/cart/templates/.default/template.php
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

use Bitrix\Main\Web\Json;
$this->setFrameMode(true);
?>
<div id="vue-cart" data-props='<?= Json::encode($arResult['CART_DATA']) ?>'></div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const { createApp } = window.Vue;
    
    createApp({
        data() {
            return {
                items: [],
                loading: false
            }
        },
        computed: {
            total() {
                return this.items.reduce((sum, item) => sum + (item.PRICE * item.QUANTITY), 0);
            }
        },
        mounted() {
            const props = JSON.parse(document.getElementById('vue-cart').dataset.props);
            this.items = props.items || [];
        },
        methods: {
            async updateQuantity(itemId, newQuantity) {
                this.loading = true;
                try {
                    const result = await BX.ajax.runComponentAction('my:cart', 'update', {
                        mode: 'class',
                        data: { itemId, quantity: newQuantity }
                    });
                    this.items = result.data.cart;
                } catch (error) {
                    console.error('Ошибка обновления:', error);
                }
                this.loading = false;
            }
        },
        template: `
            <div class="cart">
                <div v-if="loading" class="loading">Обновление...</div>
                <div class="cart-item" v-for="item in items" :key="item.ID">
                    <span>{{ item.NAME }}</span>
                    <input 
                        type="number" 
                        :value="item.QUANTITY" 
                        @change="updateQuantity(item.ID, $event.target.value)"
                        min="1">
                    <span>{{ item.PRICE * item.QUANTITY }} ₽</span>
                </div>
                <div class="cart-total">Итого: {{ total }} ₽</div>
            </div>
        `
    }).mount('#vue-cart');
});
</script>
Страницы: 1
Ответить
Форма ответов
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Интернет-магазин на готовом решении

от 7 дней

от 40 000 рублей
запуск сайта в максимально короткие сроки

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.

Разработка корпоративного сайта

от 7 дней

от 40 000 рублей

Разработка сайта без системы оплаты заказов через корзину

* стоимость зависит от наличия верстки, использования готового решения и т.д.

Участие в проекте

привлечение в проект на part-time основе

от 30 000 рублей / неделя

Возможно участие в проекте на ежедневной основе, как разработчика. Занятость - до 20 часов в неделю
Минимальный срок - одна неделя.

* сумма фиксированная