TUTO PHP - Système de pagination

PrimFX Boris ('PrimFX') Le 5 juillet 2015

On continue les cas pratiques en PHP avec un système de pagination qui est un élément clé en PHP: énormément de sites internet utilisent ce genre de systèmes ! De plus, il nous sera possible d'adapter ce système afin d'en faire un Infinite Scroll 😀 (nous verrons ça dans le prochain tuto PHP ;-))

Code du tuto:
  <?php
$bdd = new PDO("mysql:host=127.0.0.1;dbname=primfx;charset=utf8", "root", "");
$videosParPage = 10;
$videosTotalesReq = $bdd->query('SELECT id FROM videos');
$videosTotales = $videosTotalesReq->rowCount();
$pagesTotales = ceil($videosTotales/$videosParPage);
if(isset($_GET['page']) AND !empty($_GET['page']) AND $_GET['page'] > 0 AND $_GET['page'] <= $pagesTotales) {
   $_GET['page'] = intval($_GET['page']);
   $pageCourante = $_GET['page'];
} else {
   $pageCourante = 1;
}
$depart = ($pageCourante-1)*$videosParPage;
?>
<html>
   <head>
      <title>TUTO PHP</title>
      <meta charset="utf-8">
   </head>
   <body>
      <?php
      $videos = $bdd->query('SELECT * FROM videos ORDER BY id DESC LIMIT '.$depart.','.$videosParPage);
      while($vid = $videos->fetch()) {
      ?>
      <b>N°<?php echo $vid['id']; ?> - <?php echo $vid['titre']; ?></b><br />
      <i><?php echo $vid['description']; ?></i>
      <br /><br />
      <?php
      }
      ?>
      <?php
      for($i=1;$i<=$pagesTotales;$i++) {
         if($i == $pageCourante) {
            echo $i.' ';
         } else {
            echo '<a href="index.php?page='.$i.'">'.$i.'</a> ';
         }
      }
      ?>
   </body>
</html>

A propos de l'auteur

PrimFX
Boris ('PrimFX')

Je m'appelle Boris, j'ai 22 ans et je suis passionné d'informatique. Suite à mes études (Licence Informatique puis MSc Computer Science au Trinity College Dublin), je gère l'entreprise Single Quote co-fondée en 2019 et je profite de mon temps libre pour partager ma passion à travers des vidéos & articles 😃

Votre commentaire

Vous devez être connecté pour poster un commentaire. Se connecter ou Créer un compte

Commentaires 10

  • Fredoski Le 31 mars, à 00:37 | Répondre

    Merci beaucoup @Boris pour les codes et les videos
    si d'ailleurs c'était possible vous pouvez nous aider à avoir la maîtrise de Laravel et Symphony

  • georges619 Le 6 mai, à 17:21 | Répondre

    @Vaudoo pour résoudre ton problème avec le rowCount(), il faut le remplacer par num_rows. Réfère toi au lien suivant pour plus d'explications (https://stackoverflow.com/questions/39727771/call-to-undefined-method-mysqli-resultnum-rows)

  • SkaalZealot Le 7 décembre, à 23:53 | Répondre

    Je suis extrêmement gentil je vous propose la version POO remplacer les requête par les votre.

    [code]
    <?php

    Class Home{


    private function Params(){
    return 10;
    }

    //total de page a afficher
    private function PagesMax(){

    return $this->Params()->GetParam(2);

    }

    //nombre d'article en base
    public function CountWorks(){

    global $db;

    $CountWorks = $db->query('SELECT id FROM works WHERE posted=1');

    return $CountWorks->rowCount();

    }

    //on divise le total des page
    private function PageTotales(){

    return ceil($this->CountWorks()/$this->PagesMax());
    }

    //demarrage de la pagination
    private function StartPager(){

    return ($this->CurrentPage()-1)*$this->PagesMax();

    }


    //la limite de la pagination
    private function Limited(){

    return $this->StartPager() .','. $this->PagesMax();

    }

    //la page courante
    private function CurrentPage(){

    if(isset($_GET['pager']) AND !empty($_GET['pager']) AND $_GET['pager'] > 0 AND $_GET['pager'] <= $this->PageTotales()) {

    $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){

    //pagination current
    $pagination = '<div id="pagination">';
    for($i=1; $i <= $this->PageTotales(); $i++) {

    if($i <= $nb || $i > $this->PageTotales() - $nb || ($i > $this->CurrentPage()-$nb && $i < $this->CurrentPage()+$nb)){

    if($i == $this->CurrentPage()){

    $pagination .= $i.' ';

    }elseif($i == $this->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;

    $limited = $this->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

    ");

    }


    }
    [/code]

  • DJOEL Le 1 novembre, à 20:46 | Répondre

    Bonjour j'ais de difficulté à créer le système avatar pourriez-vous m'aider :-( Merci.

  • Vaudoo Le 24 octobre, à 02:04 | Répondre

    Bonjour j'ai un soucis avec le rowCount() j'arrive pas a trouver d'ou cela peut venir :/

  • Vaudoo Le 24 octobre, à 02:04 | Répondre

    Bonjour j'ai un soucis avec le rowCount() j'arrive pas a trouver d'ou cela peut venir :/

  • Daiinel Le 28 août, à 17:52 | Répondre

    Salut, merci pour ce tuto, j'ai une petite question.

    Par exemple je souhaiterai afficher une pagination comme ceci : 1,2 ... 12, ,13, 14, 15, 16, ... 120
    Comment pouvons nous procéder ?

  • toufik Le 20 août, à 18:20 | Répondre

    merci

  • loulouweb Le 3 avril, à 13:20 | Répondre

    Bonjour,
    Que dois-je faire si je souhaite faire une pagination alphabétique ?
    Merci

  • Selenium Le 19 février, à 19:01 | Répondre

    On peut voir la structure de ta base de données ?