PDO reconstruction de ma pagination

Eléphanteau du PHP | 20 Messages

07 déc. 2017, 00:14

Bonsoir,

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 "); } }
Cela dit elle fonctionne mais elle affiche toujours les même articles et il faut dire que je débute l'orienté objet, j'ai essayé de la construire en la découpant.

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; } }
Voila je n'ai pas les yeux d'un professionnelle pour check mes erreurs si une âme charitable peut y jetée un oeil ce sera grandement apprécié.

merci.

Eléphanteau du PHP | 20 Messages

07 déc. 2017, 01:00

En faite j'ai trouver le soucis mais j'ai quand même une question

Ici je vois que je suis toujours obliger d'initié ma class dans chacune de mes fonctions dans la même class

Code : Tout sélectionner

$params = new Home();


ça ce répète trop de plus je ne sais même pas si c'est sémantique.

Donc voila mon code corriger si ça peut venir en aide a quelqu'un ou être amélioré :

Code : Tout sélectionner

<?php Class Home extends Parameters{ //total de page a afficher private 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 private function PageTotales(){ $params = new Home(); $Total = $params->CountWorks(); $PagesMax = $params->PagesMax(); $PagesTotales = ceil($Total/$PagesMax); return $PagesTotales; } //demarrage de la pagination private function StartPager(){ $params = new Home(); $CurrentPage = $params->CurrentPage(); $PagesMax = $params->PagesMax(); $StartPager = ($CurrentPage-1)*$PagesMax; return $StartPager; } //la limite de la pagination private function Limited(){ $params = new Home(); $StartPager = $params->StartPager(); $PagesMax = $params->PagesMax(); $CurrentPage = $params->CurrentPage(); $limited = $StartPager .','. $PagesMax; return $limited; } //la page courante private function CurrentPage(){ $params = new Home(); $PagesTotales = $params->PageTotales(); 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 "); } }