Для начала пропишем роут по которому будут выбираться соответствующие странице данные
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} </span>".$this->pagination;
// Подключаем вид
require ROOT."/template/views/main.php";
return true;
}
P.S. Как обновить айдишники в таблице - удалить столбец id и заново создать его (primary auto-increment конечно)))
pagination.rar