Мы используем файлы Cookies для улучшения работы сайта. Также на сайте присутствуют Яндекс метрика и Google аналитика для статистики посещаемости и пользовательского поведения. Оставаясь на сайте, вы соглашаетесь с условиями использования файлов cookies и вас устраивает использование метрики. Принять
Для того, чтобы в Битрикс сделать бесконечную AJAX подгрузку страниц каталога, необходимо играться с параметром PAGEN_1 при включенной пагинации.
Выглядеть это будет примерно так:
Для начала определим в init.php переменную, в которой будем хранить количество элементов, отображаемых на странице при каждой прогрузке:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
/*
* количество элементов каталога на странице
*/
$elem_per_page = 48;
/*
* количество элементов каталога на странице
*/
$elem_per_page = 48;
/*
* количество элементов каталога на странице
*/
$elem_per_page = 48;
Далее пишем JS код, который будет вызываться при прокрутке страницы. Если мы достигаем подвала сайта — делаем AJAX запрос и добавляем в блок со списком товаров новые:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
/*AJAX прогрузка*/
$(document).ready(function(){
/* С какой страницы надо делать выборку из базы при ajax-запросе */
var startFrom = 2;
/* максимальное количество страниц */
<?php
CModule::IncludeModule("iblock");
//ID инфоблока каталога:
$catalog_iblock_id = 2;
//раздел каталога:
$catalog_section_id = 3;
$max_elements = CIBlockElement::GetList(array(),
array('IBLOCK_ID'=>$catalog_iblock_id,
'ACTIVE'=>'Y',
'SECTION_ID'=>$catalog_section_id,
'INCLUDE_SUBSECTIONS'=>'Y'
),
array(),
false,
array('ID',
'NAME')
);
$max_pages = ceil($max_elements/$elem_per_page);
?>
var maxPages = <?=$max_pages?>;
/* Переменная-флаг для отслеживания того, происходит ли в данный момент ajax-запрос. В самом начале даем ей значение false, т.е. запрос не в процессе выполнения */
var inProgress = false;
/*если количество элементов на странице < количества элементов в разделе*/
if(maxPages<startFrom) inProgress = true;
$(window).scroll(function(){
/* Если высота окна + высота прокрутки больше или равна высоте всего документа и ajax-запрос в настоящий момент не выполняется, то запускаем ajax-запрос. 600 - это высота подвала в пикселях */
/*AJAX прогрузка*/
$(document).ready(function(){
/* С какой страницы надо делать выборку из базы при ajax-запросе */
var startFrom = 2;
/* максимальное количество страниц */
<?php
CModule::IncludeModule("iblock");
//ID инфоблока каталога:
$catalog_iblock_id = 2;
//раздел каталога:
$catalog_section_id = 3;
$max_elements = CIBlockElement::GetList( array(),
array('IBLOCK_ID'=>$catalog_iblock_id,
'ACTIVE'=>'Y',
'SECTION_ID'=>$catalog_section_id,
'INCLUDE_SUBSECTIONS'=>'Y'
),
array(),
false,
array('ID',
'NAME')
);
$max_pages = ceil($max_elements/$elem_per_page);
?>
var maxPages = <?=$max_pages?>;
/* Переменная-флаг для отслеживания того, происходит ли в данный момент ajax-запрос. В самом начале даем ей значение false, т.е. запрос не в процессе выполнения */
var inProgress = false;
/*если количество элементов на странице < количества элементов в разделе*/
if (maxPages<startFrom) inProgress = true;
$(window).scroll(function() {
/* Если высота окна + высота прокрутки больше или равна высоте всего документа и ajax-запрос в настоящий момент не выполняется, то запускаем ajax-запрос. 600 - это высота подвала в пикселях */
if($(window).scrollTop() + $(window).height() >= $(document).height() - 600 && !inProgress) {
$.ajax({
url: '/ajax/catalog_pager.php',
method: 'POST',
data: {
"PAGEN_1" : startFrom,
"section_id": <?=$catalog_section_id?>
},
beforeSend: function() {
inProgress = true;
$(".iloader").append('<div id="preloader"></div>');
}
}).done(function(data){
$('#preloader').remove();
$(".iloader").append(data);
startFrom += 1;
if (maxPages>=startFrom){
inProgress = false;
}
});
}
});
});
/*AJAX прогрузка*/
$(document).ready(function(){
/* С какой страницы надо делать выборку из базы при ajax-запросе */
var startFrom = 2;
/* максимальное количество страниц */
<?php
CModule::IncludeModule("iblock");
//ID инфоблока каталога:
$catalog_iblock_id = 2;
//раздел каталога:
$catalog_section_id = 3;
$max_elements = CIBlockElement::GetList( array(),
array('IBLOCK_ID'=>$catalog_iblock_id,
'ACTIVE'=>'Y',
'SECTION_ID'=>$catalog_section_id,
'INCLUDE_SUBSECTIONS'=>'Y'
),
array(),
false,
array('ID',
'NAME')
);
$max_pages = ceil($max_elements/$elem_per_page);
?>
var maxPages = <?=$max_pages?>;
/* Переменная-флаг для отслеживания того, происходит ли в данный момент ajax-запрос. В самом начале даем ей значение false, т.е. запрос не в процессе выполнения */
var inProgress = false;
/*если количество элементов на странице < количества элементов в разделе*/
if (maxPages<startFrom) inProgress = true;
$(window).scroll(function() {
/* Если высота окна + высота прокрутки больше или равна высоте всего документа и ajax-запрос в настоящий момент не выполняется, то запускаем ajax-запрос. 600 - это высота подвала в пикселях */
if($(window).scrollTop() + $(window).height() >= $(document).height() - 600 && !inProgress) {
$.ajax({
url: '/ajax/catalog_pager.php',
method: 'POST',
data: {
"PAGEN_1" : startFrom,
"section_id": <?=$catalog_section_id?>
},
beforeSend: function() {
inProgress = true;
$(".iloader").append('<div id="preloader"></div>');
}
}).done(function(data){
$('#preloader').remove();
$(".iloader").append(data);
startFrom += 1;
if (maxPages>=startFrom){
inProgress = false;
}
});
}
});
});
В плане вёрстки делаем так: элементы каталога отображаем в div-е с классом «iloader».
JS код, представленный выше добавляем в ваш шаблон catalog.section на странице раздела каталога.
В /ajax/catalog_pager.php также отображаем catalog.section но уже с другой вёрсткой (там будут отображаться элементы каталога, которые подгружаются по каждому ajax запросу). Примерно так: