Пагинация, постраничный вывод данных

pagin и pagination

Для организации постраничного вывода данных реализованы методы 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>

 

Grewi 2024