@hollanditkzn

Как сделать ajax пагинацию страницы?

Я хотел сделать обычноое ajax пагинацию, где нажимаешь на кнопку показать еще и показывается следующие данные снизу, аналог примерно вот так сделать https://ruseller.com/lessons/les2017/demo/index.html
Только первое я так и не понял как это реализовать и где мне это в ajax брать данные, то есть заново делать запрос в бд или из имеющих данных как-то фиксировать?
Моя реализация
вьюшка
<div class="comment-order">
            <?php  foreach ($comments as $com){
                switch ($com->user_id){
                    case Yii::$app->user->id;
                        $user = 'Я';
                        break;
                    case (User::USER_DISAYNER);
                        $user = 'Дизайнер';
                        break;
                    case (User::USER_MASTER):
                        $user = 'Мастер';
                        break;
                }
                echo  '
                    <div style="display: block;">
                        <div class="userCommit">'.$user.':</div>
                        <div class="comment">'.$com->comment.'</div>
                        <div class="dateCommit">'.date('d.m H:i', strtotime($com->date)).'</div>
                    </div>';
            } ?>
            <div class="pagePagination" data-id="<?= $model->order_id ?>">Показать еще</div>
	    </div>

Контроллере в этой страница
$comments = Comment::find()->where(['id_zakaz' => $model->id_zakaz]);
        $pages = new \yii\data\Pagination((['totalCount' => $comments->count(), 'pageSize' => 3]));
        $comments = $comments->offset($pages->offset)
        ->limit($pages->limit)
        ->all();

ajax запрос
$('body').on('click', '.pagePagination', function () {
            let id = $(this).data('id');
            $.get(`${window.location.origin}/comment/comment-zakaz?id=${id}`)
                .done(res => console.log(res))
                .fail(err => console.error(err.responseText));
       });

И тот самый контроллер
public function actionCommentZakaz($id)
    {
        $comments = Comment::find()->select(['id_user', 'date', 'comment'])->where(['id_zakaz' => $id]);
        $pages = new Pagination(['totalCount' => $comments->count(), 'pageSize' => 6]);
        $comments = $comments->offset($pages->offset)
            ->limit($pages->limit)
            ->all();
        return json_encode($comments);
    }

Только немного не понятно как это делается или есть может готовое решение и я не тка ищу в гугле?
  • Вопрос задан
  • 3835 просмотров
Пригласить эксперта
Ответы на вопрос 2
paulfcdd
@paulfcdd
PHP/Sf/WEB developer
Я пагинацию реализовал следующим, простым способом:
при выводе записей на страницу в data-атрибутах кнопки для подгрузки новых записей я записал такие параметры как id последней записи в списке, лимит записей (он же офсет). То есть кнопка выглядит примерно так
<button class="load-more-btn" data-lastid="5" data-limit=5 data-offset=5>Load more</button>

При нажатии на кнопку все эти параметры аяксом передаются на сервер где выполняется обычная SQL-ка, которая мне выбирает следующий блок записей и возвращает шаблон (либо JSON) клиенту, который из него строит нужный вид. Вообще пагинация - это не что-то сложное, просто один и тот же запрос с изменяющимся параметром OFFSET
Ответ написан
Комментировать
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
Как я понял Вам надо сделать бесконечную подгрузку контента на страницу.
Вот статья, написана для yii1, но, я уверен, Вы сможете переделать под yii2.
По крайней мере поймёте принцип.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы