Ajax подгрузка при прокрутке страницы или так называемый «бесконечный скроллинг» — это способ автоматической подгрузки контента в момент, когда пользователь достигает конца списка.
Чтобы реализовать данный функционал, нам понадобится кастомизированный шаблон компонента постраничной навигации и несколько строк js-кода.
Итак, для начала копируем шаблон постранички, в компонент system.pagenavigation и переключаемся на этот шаблон в компоненте, который выводит контент. Пример над компонентом news.list.
Теперь готовим наш news.list для работы с ajax-ом. Если у вас используется файл result_modifier.php, то лучше вставляйте этот код туда. Если же такого файла нет, то вставляйте код в самое начало файла template.php.
if(array_key_exists("IS_AJAX", $_REQUEST) && $_REQUEST["IS_AJAX"] == "Y")
{
$APPLICATION->RestartBuffer();
}
Этот код сбросит буфер страницы при обращении через ajax. Это нужно для того, чтобы при ajax-запросе мы не получили часть страницы выше нашего компонента (шапку сайта и так далее).
Так же в самый конец файла component_epilog.php вставляйте следующий код (если такого файла нет, то вставляйте в самый низ файла template.php).
if(array_key_exists("IS_AJAX", $_REQUEST) && $_REQUEST["IS_AJAX"] == "Y")
{
die();
}
Этот код прекратит выполнение, если идёт ajax-запрос.
То есть, при ajax-запросе мы получим только кусок контента, на который ссылается наша кнопка постраничной навигации (без шапки и футера).
Остаётся только закинуть вот такой js-скрипт в ваш файл скриптов.
$(function() {
var load_more = false;
$(window).scroll(function() {
if($("#ajax_next_page").length && !load_more) {
var url = $("#ajax_next_page").attr("href");
var offset_button = $("#ajax_next_page").offset();
if($(this).scrollTop() >= offset_button.top - $(window).height()) {
load_more = true;
$.ajax({
url: url,
type: "POST",
data: {IS_AJAX: 'Y'},
success: function(data) {
$("#ajax_next_page").after(data);
$("#ajax_next_page").remove();
load_more = false;
}
});
}
}
});
});
При прокрутке (скроллинге) страницы, если мы достигли нашей кнопки постраничной навигации, выполняется ajax-запрос на URL кнопки. Полученный контент вставляется после кнопки, а затем кнопка удаляется.
Если же нужно подгружать контент при клике на кнопку, то используйте вот этот скрипт:
$(function() {
var load_more = false;
$(document).on("click", "#ajax_next_page", function(e) {
e.preventDefault();
if(load_more)
return false;
var ajax_url = $(this).attr("href");
load_more = true;
$.ajax({
url: ajax_url,
type: "POST",
data: {IS_AJAX: 'Y'},
success: function(data) {
$("#ajax_next_page").after(data);
$("#ajax_next_page").remove();
load_more = false;
}
});
});
});