В section.php компонента catalog вызывается компонент catalog.section с кастомным параметром VIEW для различного вида отображения товаров. В зависимости от параметра VIEW в шаблоне catalog.section отрабатывает разный код и выводится различная верстка.
Для выбора типа отображения в section.php выводятся кнопки, нажатие на которые обрабатывается js-ом, и отправляется ajax запрос на эту же текущую страницу с определенными POST параметрами. Результат запроса вставляется в блок списка товаров, т.е. весь список подменяется. Чтобы в ajax ответе получить только список товаров, а не всю страницу, в section.php используются: <?$GLOBALS['APPLICATION']->RestartBuffer();?> <?//Нужный блок со списком товаров?> <?die()?>.
Код js обработчика:
Для сохранения типа отображения в том же section.php новый параметр, полученный при ajax запросе записывается в куки. Т.е. есть стандартное значение VIEW, если в куках есть VIEW, то используем его, если пришел ajax запрос с VIEW, то используем его и его же устанавливаем в куки.
ПРОБЛЕМА:
При включенном композите после изменении вида отображения товаров список выводится неверно.
1) Открываем страницу раздела
2) Меняем вид отображения
3) Удаляем get параметр из url, перезагружаем страницу
4) Вид отображения старый, неверный
5) Перезагружаем страницу еще раз - вид отображения верный
Думаю, что связано с перезаписью кэша композита. Но как это обойти? Как вообще подобные задачи решаются с учетом композита?
Для выбора типа отображения в section.php выводятся кнопки, нажатие на которые обрабатывается js-ом, и отправляется ajax запрос на эту же текущую страницу с определенными POST параметрами. Результат запроса вставляется в блок списка товаров, т.е. весь список подменяется. Чтобы в ajax ответе получить только список товаров, а не всю страницу, в section.php используются: <?$GLOBALS['APPLICATION']->RestartBuffer();?> <?//Нужный блок со списком товаров?> <?die()?>.
Код js обработчика:
Код |
---|
$(document).on('click', '.sc-flip', function(e) { $('.sc-flip').removeClass('uk-active'); $(this).addClass('uk-active'); $('.loading').show(); var item = $(this).attr('data-item'); var url = window.location.href; BX.ajax({ url: url, method: 'POST', data: {'AJAX':'Y','temp':item}, onsuccess: function(data){ $('.loading').fadeOut(); $('#sc-pr-list').html(data); window.history.pushState(null, null, '?flip='+item); }, }); return false; }); |
ПРОБЛЕМА:
При включенном композите после изменении вида отображения товаров список выводится неверно.
1) Открываем страницу раздела
2) Меняем вид отображения
3) Удаляем get параметр из url, перезагружаем страницу
4) Вид отображения старый, неверный
5) Перезагружаем страницу еще раз - вид отображения верный
Думаю, что связано с перезаписью кэша композита. Но как это обойти? Как вообще подобные задачи решаются с учетом композита?