24.окт.2024

Создание события и подписка на него. Обновить корзину.

Рассмотрим на примере малой корзины.

В файле local/templates/ваш_шаблон/components/bitrix/sale.basket.basket.line/cart/top_template.php
Создаем событие на обновление корзины. И результат (список всех товаров в корзине и т.д.) передаем вторым аргументом.

BX.ready(function () {
    BX.onCustomEvent('OnBasketRefresh', <?=\Bitrix\Main\Web\Json::encode($arResult)?>);
})

Теперь нам нужно вывести эти товары где-то в другом месте (например, в модальном окне.)
В нужном месте вставляем

BX.addCustomEvent('OnBasketRefresh', function (result) {
    if(result.data.CATEGORIES.hasOwnProperty('READY')) {
        let products = result.data.CATEGORIES.READY
        console.log(products)
    }
})

Обновить количество товаров в корзине

// Обработчик события 'OnBasketRefresh' для отображения количества товаров.
// Создаем событие в шаблоне малой корзины.
BX.addCustomEvent('OnBasketRefresh', function (result) {
	if (result.data.NUM_PRODUCTS) {
		let smallCartQty = document.querySelectorAll('[data-cart-qty]')
		if (smallCartQty.length > 0) {
			smallCartQty.forEach(qty => {
				qty.textContent = result.data.NUM_PRODUCTS
			})
		}
	}
})

Пересчитать корзину

BX.onCustomEvent('OnBasketChange'); 


Получение списка всех событий в системе

В файле /bitrix/js/main/core/core.js

.

Старый вариант

находим: BX.onCustomEvent(eventObject, eventName, arEventParams, secureParams);

Вставим в его исполнение логирование:

console.log(eventName, arEventParams);

Новый вариант

 value: function emit(eventName, event) {
      console.log(eventName, event);
      EventEmitter.emit(this, eventName, event);
      return this;
}

После этого при совершении различных действий на клиенте (клики, push-информации, открытии popup) в лог будут писаться коды событий. Вам останется подобрать нужное.

Добавить обработчик на мое событие

BX.addCustomEvent('onMyEvent',function () {

Вызываем событие.

BX.fireEvent(BX('elementId'),'change');
BX.onCustomEvent('onMyEvent');
← Назад к списку новостей