Tant bien que mal j'essaye de reconstruire ma pagination qui fonctionne très bien en PHP procédural avec ias-ajax infinite scroll.
Voici la class :
Code : Tout sélectionner
<?php
Class Home{
/*
$Params = new Parameters();
$PagesMax = $Params->GetParam(2);
$PagesTotal = $db->query('SELECT id FROM works WHERE posted=1');
$Total = $PagesTotal->rowCount();
$PagesTotales = ceil($Total/$PagesMax);
$StartPager = ($CurrentPage-1)*$PagesMax;
$limited = $StartPager .','. $PagesMax;
*/
//total de page a afficher
public function PagesMax(){
$parameters = new Parameters();
$PagesMax = $parameters->GetParam(2);
return $PagesMax;
}
//nombre d'article en base
public function CountWorks(){
global $db;
$PagesTotal = $db->query('SELECT id FROM works WHERE posted=1');
$Total = $PagesTotal->rowCount();
return $Total;
}
//on divise le total des page
public function PageTotales(){
$params = new Home();
$Total = $params->CountWorks();
$PagesMax = $params->PagesMax();
$PagesTotales = ceil($Total/$PagesMax);
return $PagesTotales;
}
//demarrage de la pagination
public function StartPager(){
$params = new Home();
$CurrentPage = $params->CurrentPage();
$PagesMax = $params->PagesMax();
$StartPager = ($CurrentPage-1)*$PagesMax;
return $StartPager;
}
//la limite de la pagination
public function Limited(){
$params = new Home();
$StartPager = $params->StartPager();
$PagesMax = $params->PagesMax();;
$limited = $StartPager .','. $PagesMax;
return $limited;
}
//la page courante
public function CurrentPage(){
if(isset($_GET['pager']) AND !empty($_GET['pager']) AND $_GET['pager'] > 0 AND $_GET['pager'] <= $PagesTotales) {
$CurrentPage = $_GET['pager'];
} else {
//si id null alors page sera egal 1
$CurrentPage = 1;
}
return $CurrentPage;
}
//la vue de la pagination
public function Pagination($nb=2){
$params = new Home();
$PagesTotales = $params->PageTotales();
$CurrentPage = $params->CurrentPage();
//pagination current
$pagination = '<div id="pagination">';
for($i=1; $i <= $PagesTotales; $i++) {
if($i <= $nb || $i > $PagesTotales - $nb || ($i > $CurrentPage-$nb && $i < $CurrentPage+$nb)){
if($i == $CurrentPage){
$pagination .= $i.' ';
}elseif($i == $CurrentPage+1){
$pagination .= '<a href="'.WEBROOT.'home/'.$i.'" class="suivant">'. $i .'</a>' ;
}else{
$pagination .= '<a href="'.WEBROOT.'home/'.$i.'">'. $i .'</a>' ;
}
}
}
$pagination .= '</div>';
return $pagination;
}
//la requette qui affiche les article use ias-ajax infinita scroll
public function HomeWorks(){
global $db;
$params = new Home();
$limited = $params->Limited();
return $db->query("
SELECT works.id,
works.name,
works.writer,
works.content,
works.posted,
works.date,
works.slug,
images.name AS image_name,
categories.cat_name,
categories.id AS catid,
users.email,
users.username,
users.avatar,
comments.post_id,
COUNT(comments.post_id) AS nbcoms
FROM works
LEFT JOIN users ON users.username = works.writer
LEFT JOIN categories ON works.category_id=categories.id
LEFT JOIN comments ON comments.post_id = works.id
LEFT JOIN images ON images.id = works.image_id
WHERE works.posted=1
GROUP BY works.id
ORDER BY works.date DESC LIMIT $limited
");
}
}
Je stock aussi en base de donnée le max d'article a afficher, que j'affiche sous forme de paramêtres avec cette class que j'utilise dans ma pagination.
Code : Tout sélectionner
<?php
Class Parameters{
private function Params(){
global $db;
$params = $db->query("SELECT * FROM parameters");
$param = [];
while($rows = $params->fetchObject()){
$param[] = $rows;
}
return $param;
}
public function GetParam($Parameters){
$GetParam = new Parameters();
return $GetParam->Params()[$Parameters]->param_value;
}
}
merci.