Для организации постраничного вывода данных реализованы методы pagin и pagination. Метод pagin принимает параметры для sql запроса, а метод pagination выводит данные для шаблона. Пример запроса с пагинацией:
<?php
use app\models\blogs;
$blogs = blogs::where('user_id', user_id())->pagin();
$this->data['blogs'] = $blogs->all();
$this->data['pagin'] = $blogs->pagination();
new view('blogs/blogs/index', $this->data);
Метод pagin влияет на сортировку, если необходимо указать сортировку методом sort, то нужно указать false вторым параметром
<?php
use app\models\blogs;
$blogs = blogs::where('user_id', user_id())->sort('desc', 'date_create')->pagin(20, false);
$this->data['blogs'] = $blogs->all();
$this->data['pagin'] = $blogs->pagination();
new view('blogs/blogs/index', $this->data);
Метод pagination возвращает массив данных
[
'line' => [
1 => '',
2 => 'actual',
3 => '',
]
'priv' => 1
'next' => 2
'url' => null
'actual' => 2
];
Пример реализации шаблона пагинации для bootstrap
<ul class="pagination">
<li class="page-item <?php if (!$pagin['priv'] > 0) : ?>disabled<?php endif; ?>">
<a class="page-link pagin_text" href="<?= eGetReplace('str', $pagin['priv']) ?>" tabindex="-1" aria-disabled="true">Назад</a>
</li>
<?php
//Если текущая страница рядом с концом или началом увеличиваем край
$countLi =count($pagin['line']);
$min = $pagin['actual'] > 2 ? 2 : 6;
$max = $pagin['actual'] < $countLi - 2 ? $countLi - 2 : $countLi - 6;
?>
<?php foreach ($pagin['line'] as $key => $i) : ?>
<!-- Первые, последние и рядом с актуальной страницей -->
<?php if ($key <= $min || ($key >= $pagin['actual'] - 3 && $key <= $pagin['actual'] + 3) || $key > $max) : ?>
<?php if ($i == 'active') : ?>
<li class="page-item active" aria-current="page">
<a class="page-link pagin_el_active" href="<?= eGetReplace('str', $key) ?>"><?= $key ?></a>
</li>
<?php else : ?>
<li class="page-item">
<a class="page-link pagin_el" href="<?= eGetReplace('str', $key) ?>"><?= $key ?></a>
</li>
<?php endif; ?>
<!-- Многоточие -->
<?php else : ?>
<?php if($key == $min+1 || $key == $pagin['actual'] + 4): ?>
<li class="page-item"><span class="page-link pagin_el disabled">...</span></li>
<?php endif; ?>
<?php endif; ?>
<?php endforeach; ?>
<li class="page-item <?php if (!$pagin['next'] > 0) : ?>disabled<?php endif; ?>">
<a class="page-link pagin_text" href="<?= eGetReplace('str', $pagin['next']) ?>">Далее</a>
</li>
</ul>