Данный скрипт обязательно спросит ваше мнение касаемо того, хотите вы подгрузить следующую страницу или же вообще не хотите получать уведомления об этом при достижении нижней границы страницы (Как в рифму здорово получилось :D)
Скрипт будет работать лишь для главной страницы Каталога файлов
Установка:
Каталог файлов -- Главная страница каталога файлов -- Найдите $BODY$ и сразу после этого вставляйте:
Код
<?if($PAGE_ID$ = 'main')?>
<div class="apopagesel" style="display: none">
$NUM_PAGES$
</div>
<script>
const apoloadme = '<fieldset><legend>Подгрузить ещё?</legend><input type="button" value="Непременно!" /><br><input type="button" value="Не спрашивай, достал!" /></fieldset>';
const pageSelector = '.apopagesel';
const contentSelector = '.Mybody';
let currentPage = 1;
let isLoading = false;
let isAutoLoadDisabled = false;
let isPromptShown = false; // Флаг для показа окна только после подгрузки
function getMaxPages() {
return parseInt($(pageSelector).text()) || 1;
}
function loadNextPage() {
isLoading = true;
$.get(`/?page${currentPage + 1}`, (response) => {
try {
const $newContent = $(contentSelector, response).html();
if ($newContent) {
$(contentSelector).append($newContent);
currentPage++;
_uWnd.alert(currentPage >= getMaxPages() ? 'Подгружена последняя страница' : `Подгружена страница ${currentPage}`, '', { w: 250, h: 70 });
isPromptShown = false; // Сбрасываем флаг после подгрузки, чтобы показать окно для следующей страницы
} else {
console.warn('Контент не найден в ответе сервера');
}
} catch (error) {
console.error('Ошибка обработки ответа:', error);
_uWnd.alert('Ошибка при подгрузке страницы', '', { w: 250, h: 70 });
} finally {
isLoading = false;
}
}).fail((error) => {
console.error('Ошибка запроса:', error);
_uWnd.alert('Не удалось загрузить страницу', '', { w: 250, h: 70 });
isLoading = false;
});
}
$(window).on('scroll', () => {
if (isLoading || isAutoLoadDisabled || currentPage >= getMaxPages() || isPromptShown) return;
const $pageSel = $(pageSelector);
if (!$pageSel.length) return;
const scrollPosition = window.scrollY + window.innerHeight;
const triggerPosition = $pageSel.offset().top;
if (scrollPosition >= triggerPosition - 600) {
isLoading = true;
isPromptShown = true; // Устанавливаем флаг, чтобы окно не показывалось повторно до подгрузки
_uWnd.alert(apoloadme, 'Эм, а можно вопрос?', { w: 250, h: 120, tm: 7000 });
setTimeout(() => {
$('input[value="Непременно!"]').on('click', function () {
$(this).remove();
loadNextPage();
});
$('input[value="Не спрашивай, достал!"]').on('click', function () {
_uWnd.alert('Ок, понял!', 'Всё, убедил', { w: 250, h: 120 });
isAutoLoadDisabled = true;
isLoading = false;
isPromptShown = false; // Сбрасываем, если пользователь отказался
});
}, 1000);
setTimeout(() => {
isLoading = false;
}, 17000);
}
});
</script>
<?endif?>
Замените $BODY$ на:
Код
<div class="Mybody">$BODY$</div>