Да, через пагинацию можно.
Сделайте хидден поле с номером текущей страницы, как пользователь начинает делать прокрутку, иницилизируете ajax запрос, берете номер страницы и прибавляете к нему 1, таким образом получаете данные для след. страницы.
Выводите результат, а хидден поле с номером текущей страницы обновляете.
upd.
Ну смотрите.
Для начала создаете hidden поле (оно нам нужно, для определения текущей страницы)
<input type="hidden" name="currentPage" id="currentPage" value="">
Далее в нужном вам экшне иницилизируете пагинацию, что-то типо:
$query = ... запрос к БД
$countQuery = clone $query;
$pages = new Pagination(['totalCount' => $countQuery->count()]);
$pages->setPageSize(10);
$model = $query->offset($pages->offset)->limit($pages->limit)->all();
return $this->render('index', [
'model' => $model,
'pages' => $pages,
]);
И не забывайте про
use yii\data\Pagination;
Далее, создаете еще один экшн, который как раз отвечает за подгрузку материалов
public function actionPage()
{
if(Yii::$app->getRequest()->getIsAjax()):
$query = ...запрос к бд...;
$countQuery = clone $query;
$pages = new Pagination(['totalCount' => $countQuery->count()]);
$pages->setPageSize(10);
$models = $query->offset($pages->offset)->limit($pages->limit)->all();
$max_pages = $countQuery->count() / 10;
if($_POST['current_page'] > ceil($max_pages)) {
return false;
} else {
return $this->renderPartial('_page', [
'model' => $models,
'pages' => $pages,
]);
}
endif;
}
И останется дело за малым, нужно иницилизировать AJAX запрос к эшну page при прокрутке страницы.
Как-то так, извините за форматирование кода. Если кто знает решение элегантней, то подскажите
P.S Это пример для Yii 2, для первого принцип такой же, но реализация другая, думаю разберетесь