Creearea unui script de paginare în PHP

Creearea unui script de paginare in PHP

Oricine a făcut un website cu adăugare de conținut dinamic, cu siguranță s-a lovit de problema paginării datelor. Paginarea reprezintă împărțirea conținutului afișat, pe mai multe pagini. De ce vrem să facem asta? Răspunsul este simplu: Să ne imaginăm un blog cu 1000 de articole care trebuie să le afișăm. Dacă toate ar fi afișate pe o singură pagină, nu numai că ar fi dificil de vizualizat, dar majoritatea browserelor le-ar afișa cu o întârziere sesizabil de mare.

Pentru a întelege cât mai bine script-ul de mai jos, am adăugat comentarii pentru fiecare secțiune sau linie de cod folosită. Pentru a adapta script-ul la nevoile website-ului tău va trebui să modifici câteva date precum: user-ul, parola și numele bazei de date, numele tabelei, numărul de elemente afișate pe pagină.

Înainte de toate va trebui să facem conectarea și selectarea bazei de date pe care o folosim:

<?php
  @mysql_connect("localhost","user_bd","parola_bd" ) or die();
  @mysql_select_db("nume_bd" ) or die();
  @mysql_set_charset("utf8" );
?>

Script-ul pentru paginare:

<?php
  // selectăm articolele din baza de date
  $query=mysql_query("SELECT COUNT(*) AS `num` FROM `nume_tabela_bd`" );
  $result=mysql_fetch_assoc($query);
  
  $nr_total_de_articole=$result['num'];  // numărul total de articole care le-am găsit în baza de date
  $nr_articole_pe_pagina=10;  // aici definim numărul de articole afișate pe o pagină
  $nr_de_pagini=ceil($nr_total_de_articole/$nr_articole_pe_pagina);  // calculăm câte pagini vor fi în total
  
  // dacă variabila p este setată și este de tip numeric atunci pagina curentă va lua valoarea variabilei p, altfel va lua valoarea 1
  if(isset($_GET['p']) && is_numeric($_GET['p'])){
    $pagina_curenta=(int)$_GET['p'];
  }
  else{
    $pagina_curenta=1;
  }

  // dacă pagina curentă are valoarea mai mare decât numărul de pagini atunci o setăm la valoarea ultimei pagini
  if($pagina_curenta > $nr_de_pagini){
    $pagina_curenta=$nr_de_pagini;
  }
  // dacă pagina curentă este mai mică decât 1 atunci o resetăm la valoarea 1
  elseif($pagina_curenta < 1){
    $pagina_curenta=1;
  }

  // definim variabila paginare prin afișarea paginii curente și a numărului total de pagini existente
  $paginare='<a class="paginare">Pagina '.$pagina_curenta.' din '.$nr_de_pagini.'</a>';

  $interval=3;  // setăm numărul de pagini din jurul paginii curente pentru care afișăm link-uri

  // dacă pagina curentă este mai mare decât intervalul setat atunci afișăm link-uri pentru prima pagină și pentru pagină înapoi
  if($pagina_curenta > (1+$interval)){
    $paginare.='<a class="paginare" href="index.php?p=1">Prima</a>';
    $pagina_inapoi=$pagina_curenta-1;
    $paginare.='<a class="paginare" href="index.php?p='.$pagina_inapoi.'">«</a>';
  }
  // dacă pagina curentă este mai mare decât 1 și mai mică sau egală decât intervalul setat atunci afișăm link doar pentru pagină înapoi
  elseif(($pagina_curenta > 1) && ($pagina_curenta <= (1+$interval))){
    $pagina_inapoi=$pagina_curenta-1;
    $paginare.='<a class="paginare" href="index.php?p='.$pagina_inapoi.'">«</a>';
  }

  // calculăm link-urile pentru paginile care trebuie afișate
  for($x=($pagina_curenta - $interval); $x < (($pagina_curenta + $interval) + 1); $x++){
    if(($x > 0) && ($x <= $nr_de_pagini)){  
      if($pagina_curenta != $x){
        $paginare.='<a class="paginare" href="index.php?p='.$x.'">'.$x.'</a>';
      }
      else{
        $paginare.='<a class="paginare" style="background-color:#ffffff; color:#000000;">'.$x.'</a>';  // link-ul pentru pagina curentă îl afișăm cu altă culoare
      }
    }
  }

  // dacă pagina curentă nu este ultima și este mai mică decât intervalul setat atunci afișăm link-uri pentru ultima pagină și pentru pagină înainte
  if(($pagina_curenta != $nr_de_pagini) && ($pagina_curenta < ($nr_de_pagini - $interval))){
    $pagina_inainte=$pagina_curenta+1;
    $paginare.='<a class="paginare" href="index.php?p='.$pagina_inainte.'">»</a>';
    $paginare.='<a class="paginare" href="index.php?p='.$nr_de_pagini.'">Ultima</a>';
  }
  // dacă pagina curentă nu este ultima și este mai mare sau egală decât intervalul setat atunci afișăm doar link-ul pentru pagină înainte
  elseif(($pagina_curenta != $nr_de_pagini) && ($pagina_curenta >= ($nr_de_pagini - $interval))){
    $pagina_inainte=$pagina_curenta+1;
    $paginare.='<a class="paginare" href="index.php?p='.$pagina_inainte.'">»</a>';
  }

  $inceput=($pagina_curenta - 1) * $nr_articole_pe_pagina;  // stabilim intrarea din baza de date de unde începe select-ul pentru pagina curentă
  $query_afisare_articole="SELECT * FROM `nume_tabela_bd` ORDER BY `data` DESC LIMIT $inceput, $nr_articole_pe_pagina";

  // aici se face afisarea articolelor

  print $paginare;  // afișăm link-urile paginării creeate mai sus
?>

Acum că am terminat cu partea de cod php putem stiliza puțin afișarea link-urilor de paginare cu ajutorul unei clase css:

.paginare{
  color:#ffffff;
  background-color:#000000;
  border:1px solid #cccccc;
  display:inline-block;
  text-decoration:none;
  padding:5px;
  text-align:center;
}

.paginare:hover{
  background-color:#ffffff;
  color:#000000;
}

Sper că vă este de folos acest tutorial. Succes!

Postat de spooker Duminică, 26 Mai 2013 la ora 22:47 în categoria IT & C


Creearea unui script de paginare în PHP - 5 comentarii:
1. avatar
Foarte bravo baieti
2. avatar
Foarte util si usor de inteles! Multumesc mult!
3. avatar
spooker a scris pe 6 Februarie 2014, ora 13:46
Mă bucur că v-a fost de folos acest tutorial.
4. avatar
Bravo ! Foarte de folos tutorial-ul !
5. avatar
foarte de folos! dar daca are o selectare in baza de exemplu tabela upload si trebuie selectata categoria ex romania cum facem?
Ai ceva de spus?

*

*

*
caractere rămase din disponibile.

Când postezi un comentariu încearcă să ții cont de aceste reguli!

      

IP-ul tău public este 18.97.14.91, folosești sistemul de operare necunoscut, o rezoluție de pixeli și browser necunoscut !

Dacă am dreptate dă-mi un like pe Facebook!