Задача: добавить к комплексному компоненты новости возможность дозагрузки новостей. При выводе всех элементов - кнопка “показать еще” должна пропадать со страницы.
При создании сайта на 1С-Битрикс данную задачу можно решить так:
- Добавляем на страницу компонент новости, задаем необходимые параметры
- Размещаем на той же странице обработчик загрузки новых документов
- Добавляем компонент список новостей на специальной странице
С первым пунктом вопросов быть не должно, перейдем сразу к следующим. В шаблон комплексного компонента после вывода списка документов добавляем код
<?php
$arFilter = array('ACTIVE' => 'Y', 'IBLOCK_ID' => $arParams["IBLOCK_ID"]);
$num_rows = CIBlockElement::GetList(
Array(),
$arFilter,
true
);
if($num_rows >= $arParams['NEWS_COUNT']) { ?>
<div class="catalog-production__show-more btn js-show-more">Смотреть ещё</div>
<script>
var newsPagen = 2;
var max_page = <?=$num_rows;?>;
$(document).ready(function() {
$(".js-show-more").on('click',function() {
$.ajax({
url: '/_ajax/more_news.php?PAGEN_1='+newsPagen,
success: function( data ) {
$('.news__container').append(data);
newsPagen++;
if((max_page-<?=$arParams["NEWS_COUNT"];?>) <= <?=$arParams["NEWS_COUNT"];?>) {
$(".js-show-more").remove();
}
}
});
return false;
});
});
</script>
<?php } ?>
Дополнительный запрос используется для того, чтобы посчитать количество новостей в инфоблоке. Можно реализовать проверку и через компонент постраничной навигации, создав дополнительный шаблон и загружая его вместе с новостями.
Далее создаем папку _ajax в которой будем хранить файлы обработчики. В нашем случае это будет more_news.php. В нем мы размещаем компонент список новостей и обязательно включаем постраничную навигацию, которую из шаблона нужно удалить. Содержимое файла обработчика будет примерно такое:
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');
$APPLICATION->IncludeComponent(
"bitrix:news.list",
"news_list",
Далее остается только добавить стили кнопке. Для компонента список новостей можно либо создать собственный шаблон, если верстка у комплексного сложная, либо использовать один шаблон на два компонента, убирая лишнее с помощью условий.