Реализация пагинации страниц

Для начала пропишем роут по которому будут выбираться соответствующие странице данные

return array(
    // Главная страница и страница №
    '^(page(\d+))?$' => 'MainPage/index/$2' // actionIndex в mainPageController с передачей номера страницы или пустого значения если зашли на главную
);
В классе модели напишем функцию которая будет вычислять количество записей в базе, количество страниц соответственно и возвращать строку которую будем выводить в html

function getPagination()
  {
    $countPages = $this->query("select count(`id`) from `posts`");
    $countPages = $countPages[0][0];
    $limit = $this->limit = 12;
    $str = "";
    $countPages = $this->countPages = ceil($countPages/$limit);
    for($i = 1; $i <= $countPages; $i++){
       $str .= "<a class='numberPage' id='page$i' href='/page$i'>$i</a>";
    }
    return $str;
  }

Далее в абстрактном классе ACore, от которого наследуются все контроллеры, создаём экземпляр модели

class ACore{
	
  public $m;

	public function __construct()
    {
  		$this->m = new \models\Model();
      $this->pagination = $this->m->getPagination();
      $this->countPages = $this->m->countPages;
    }
}
И в методе actionIndex MaiPageController-а ловим номер страницы и выбираем данные

public function actionIndex($pageNumber)
  {
    $pageNumber = $pageNumber[0];
    if(!$pageNumber) $pageNumber = 1;
    $pageNumber2 = $pageNumber - 1;
    $limit = $this->m->limit;
    $to = $pageNumber2*$limit;
    $posts = $this->m->query("select * from `posts` order by `id` desc limit $limit offset $to");
    $title = 'Пагинация';
    $description = 'Блог Creative*Web';
    $pagination = "<span class='pagSpan'>Страница $pageNumber из {$this->countPages} &nbsp;</span>".$this->pagination;
    
    // Подключаем вид
    require ROOT."/template/views/main.php";

    return true;
  }

P.S. Как обновить айдишники в таблице - удалить столбец id и заново создать его (primary auto-increment конечно))) pagination.rar

02.03.2023

187
A B i U S JS

PHP HTML CSS
Чат
    Для входа только имэйл или имя и апроль
    Можно сменить аватар
    Имэйл Ваше имя
    Пароль