@ivanovav27
Занимаюсь разработкой сайтов

Не работает добавление в корзину битрикс?

Добрый день!
Через CIBlockSection::GetList вывожу разделы каталога. По клику на каждый раздел, получаю SECTION_ID и через ajax вставляю на страницу результат работы компонента bitrix:catalog.section
Все хорошо, товары обновляются и выводятся на страницу. Но не работает "добавить в корзину". Если компонент просто вставлять на странице, то все работает.

Как можно решить проблему? Можно ли как-то стандартными средствами добавить товар в корзину?
Или проще написать свой обработчик добавления в корзину?
  • Вопрос задан
  • 857 просмотров
Решения вопроса 1
@PetrPo
1. Первый вариант:
- ставишь bitrix:catalog
- файл sections.php в нем выводишь свой фильтр по разделам (раздел в фильтре должен быть ссылкой) и catalog.section, перед ним глобальный фильтр по твоему бренду (если не знаешь как, напиши, объясню), у catalog.section указываешь параметры
'INCLUDE_SUBSECTIONS' => 'Y',
'SHOW_ALL_WO_SECTION' => 'Y',
'BY_LINK' => 'Y'

- файл section.php - все тоже самое, только в catalog.section передаешь id раздела, он будет в $arResult['VARIABLES'], добавляешь параметр INCLUDE_SUBSECTIONS если нужен (2 других параметра не надо)
- в вызове bitrix.catalog на index.php раздела ставишь параметры
'AJAX_MODE' => 'Y',
'AJAX_OPTION_STYLE' => 'Y',
'AJAX_OPTION_HISTORY' => 'Y'

Все остальное на себя возьмет битрикс, единственное все будет работать в режиме ajax, т.е. ссылки на деталку товаров тоже будут грузится ajax-ом, если надо чтобы только твой фильтр по разделам работал ajax-ом, тогда

2. Второй вариант
- примерно как у тебя сейчас, есть обработчик ajax в него передаешь url на текущую страницу и в data передаешь некоторый ключ, например
//.......
url: '<?=$APPLICATION->GetCurDir()?>'
data: {SECTION_ID: idSection, BRAND_AJAX: 'Y'}
//.......

- подставляешь свой SECTION_ID в параметры catalog.section, если он есть в request
- находишь часть контента которую ты хочешь получить обновленную
<?
$request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest();
$bBrandAjax = $request->isAjaxRequest() && isset($request['BRAND_AJAX']) && $request['BRAND_AJAX'] == 'Y';
?>
<?// оборачиваешь в div для простоты вставки через js, можно поколдовать и сделать без этого контейнера, но тут уже сам))?>
<div id="ajax_brand_container">
<?
if($bBrandAjax) {
    $APPLICATION->RestartBuffer();
}

// твой ajax-вый контент (вероятно только catalog.section)

if($bBrandAjax) {
    die();
}
?>
</div>

- В onsuccess ajax обработчика пишешь
var ajaxContainer = document.querySelector('#ajax_brand_container');

BX.ajax({
	//........
	onsuccess: async function(data) {
		if(ajaxContainer) {
			var obResult = BX.processHTML(data);
			
			await !(function() {
				ajaxContainer.innerHTML = data;
			})();
			
			BX.ajax.processScripts(obResult.SCRIPT);
		}
	}
	//........


P.S.
Писал без тестирования, попробуй, если будут ошибки пиши...

P.P.S.
при втором варианте я бы посоветовал тоже использовать bitrix.catalog, но тут сам смотри
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Anadi
@Anadi
Если ответ Вам помог мой, решением отметье его!
Это логично, ведь у вас скрипт не работает. В битриксовом конфиге аякса есть параметр "emulateOnload", попробуйте добавить emulateOnload: true. Должно решить проблему.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы